這段代碼可以在VS2013正確運行,並且輸出:
你好,133
你好,233
,但在代碼::塊(使用GCC編譯器和在一個Ubuntu系統),編譯器告訴我:嵌套℃的情況下++模板
|| ===構建:調試test_sth(編譯器:GNU GCC編譯器)=== |
在成員函數'void A :: say()'中:
line 28錯誤:''''令牌之前的預期主表達式
在'void A :: say()[with C = B]'的實例化中' :
線31從這裏需要
第28行錯誤:類型的無效操作數「<懸而未決重載的函數類型>」和「INT」爲二進制「運算符<」
|| ===建立失敗:2錯誤(S ),2次警告(0分鐘,0秒)=== |
有沒有人可以告訴我什麼是錯的,爲什麼?
第28行是:this-> c.Match < 233>();
第31行是:模板結構A < B < int>>;
#include "stdio.h"
using namespace std;
template<typename C>
struct A
{
C c;
void say();
};
template<typename C>
class B
{
C name;
public:
template<int D>
void Match()
{
printf("hello,%d\n",D);
}
};
template<typename C>
void A<C>::say()
{
this->c.Match<233>();
}
template struct A<B<int>>;
int main()
{
A<B<int>> a1;
a1.c.Match<133>();
a1.say();
getchar();
return 0;
}
'這個 - > c.template匹配<233>();' – cpplearner