| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1398 人关注过本帖
标题: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
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册: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
快速回复:C++的hpp文件 template代码部分 编译出错C2061 C2143
数据加载中...
 
   



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

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