【发布时间】:2015-05-19 21:09:15
【问题描述】:
我在下面创建了一些玩具类。编译的时候,好像编译器构造对象有问题,但是调用对象的方法就报错了。
我尝试使用 MSVC10 和 gcc 4.9 进行编译,相应的错误消息是:
- MSVC10:错误 C2228:左侧“.get”必须具有类/结构/联合
- g++ 4.9:错误:在“test”中请求成员“get”,它属于非类类型“TestClass(DataContainer)”
有什么问题?谢谢!
#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;
}
【问题讨论】:
标签: c++ visual-c++ constructor g++ rvalue