标题:C++的hpp文件 template代码部分 编译出错C2061 C2143
只看楼主
竹下旦时
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-7-19
结帖率:0
已结贴  问题点数:20 回复次数:1 
C++的hpp文件 template代码部分 编译出错C2061 C2143
以红色出为样例  其余template同样有该问题    编译不通过
 template<typename T    , typename... Ts>
        static void Print(std::stringstream &os, const T &first) {
            os << first;
        }

    template<typename T    , typename... Ts> //错误    6    error C2143: 语法错误 : 缺少“,”(在“...”的前面)
        static std::string Print(std::stringstream &os, const T &first, Ts... args) {//错误    7    error C2061: 语法错误: 标识符“Ts”   
            os << first;
            Print(os, args...);
            return os.str();
        }

    template<typename T    , typename... Ts>
        static std::string Print(T first, Ts... args) {
            std::stringstream ss;
            return Print(ss, first, args...);
        }
搜索更多相关主题的帖子: template Print std first args 
2018-07-19 17:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
首先,也是最重要的,你的代码要完整,要排版

其次,如果确定自己的代码没错的话,要讲出你用的编译器编译参数
比如,如下代码在 gcc8.1 编译上,编译参数在 -std=c++11 及之上,可以编译通过
程序代码:
#include <iostream>
#include <sstream>
#include <string>

template<typename T, typename... Ts>
static void Print( std::ostringstream& os, const T& first )
{
    os << first;
}

template<typename T, typename... Ts>
static std::string Print( std::ostringstream& os, const T& first, Ts... args )
{
    os << first;
    Print( os, args... );
    return os.str();
}

template<typename T, typename... Ts>
static std::string Print( T first, Ts... args )
{
    std::ostringstream ss;
    return Print( ss, first, args... );
}


using namespace std;

int main( void )
{
    cout << Print(1,"-",2.3) << endl;
}

顺便说一下,C++17引入的 fold expression 可以简化很多代码。如下代码在 gcc8.1 编译上,编译参数在 -std=c++17 及之上(注意上一段代码只需要C++11标准,这一段代码需要C++17标准),可以编译通过
程序代码:
#include <iostream>
#include <sstream>
#include <string>

template<typename ...Args>
static std::string Print( Args&&... args )
{
    std::ostringstream ss;
    ( ss << ... << args );
    return ss.str();
}

using namespace std;

int main( void )
{
    cout << Print(1,"-",2.3) << endl;
}


2018-07-20 10:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488697-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135830 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved