gpt4 book ai didi

c++ - 构造错误,调用其方法时找不到对象?

转载 作者:行者123 更新时间:2023-11-30 02:38:54 24 4
gpt4 key购买 nike

我在下面创建了一些玩具类。在编译过程中,编译器似乎在构造对象时出现问题,但在调用对象的方法时抛出错误。

我试过使用 MSVC10 和 gcc 4.9 编译,各自的错误信息是:

  • MSVC10: error C2228: left '.get' must have class/struct/union
  • 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;
}

最佳答案

看起来像 most vexing parse .编译器认为您正在声明一个函数而不是一个对象。这也有效:

int main()
{
Data<int> a(100);
TestClass test = TestClass(DataContainer(a));
std::cout << test.get() << std::endl;
return 0;
}

关于c++ - 构造错误,调用其方法时找不到对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com