我在下面创建了几个玩具类。在编译期间,似乎编译器在构造对象时遇到一些问题,但在调用对象的方法时会抛出错误。
我尝试使用MSVC10和gcc 4.9进行编译,相应的错误消息是:
问题是什么?谢谢!
#include <iostream>
using namespace std;
template <class T>
class Data
{
public:
Data(T i) : d(i)
{}
T get() const {
return d;
}
protected:
T d;
};
class DataContainer
{
public:
DataContainer(const Data<int>& i) : d(i)
{}
const int get() const {
return d.get();
}
protected:
Data<int> d;
};
class TestClass
{
public:
TestClass(const DataContainer& a) : d(a)
{}
int get() {
return d.get();
}
protected:
DataContainer d;
};
int main()
{
Data<int> a(100);
TestClass test(DataContainer(a));
std::cout << test.get() << std::endl;
return 0;
}
然而,这成功编译。
int main()
{
Data<int> a(100);
DataContainer cont(a);
TestClass test(cont);
std::cout << test.get() << std::endl;
return 0;
}
答案 0 :(得分:3)
看起来像most vexing parse。编译器认为您正在声明函数而不是对象。这也有效:
int main()
{
Data<int> a(100);
TestClass test = TestClass(DataContainer(a));
std::cout << test.get() << std::endl;
return 0;
}