构造错误,在调用对象的方法时无法找到对象

Error with construction, unable to find object when calling its method?

本文关键字:对象 方法 错误 调用      更新时间:2023-10-16

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

我已经尝试使用MSVC10和gcc 4.9编译,各自的错误消息是:

  • MSVC10:错误C2228: left '。get必须有class/struct/union
  • g++ 4.9:错误:请求成员'get'在'test'中,它是非类类型'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;
    }

看起来很烦人。编译器认为你声明的是一个函数而不是一个对象。

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