以下看似正确的代码无法在Visual Studio 2015 RC中编译,但有以下错误:
test.cpp(6): error C2098: unexpected token after data member 'T'
test.cpp(11): note: see reference to class template instantiation 'Foo<int>' being compiled
test.cpp(6): error C2059: syntax error: '>'
代码:
template <typename, typename> struct X {};
template <typename T>
struct Foo
{
X<int, T> * p = new X<int, T>;
};
int main()
{
Foo<int> f;
}
为什么会这样,我该如何克服这个问题?
答案 0 :(得分:1)
您的编译器似乎没有正确实现C ++,特别是支持或相等的初始化程序。
一个简单的解决方法是用构造函数初始化器替换brace-or-equals初始化器:
template <typename T>
struct Foo
{
Foo() : p(new X<int, T>) {}
// ^^^^^^^^^^^^^^^^
X<int, T> * p; // no initializer
};
历史记录:原始帖子中的修复,在我用一个重现错误的最小例子替换它之前:
class ArdalanCollection : public ICollection<T>
{
public:
ArdalanCollection()
: storage(new Container_<int, T*>()), index(0) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
virtual void add(T* obj) {
storage->add(index++, obj);
};
private:
Container_<int, T*> *storage; // no initializer here
int index;
};