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

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

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

我试过使用 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;
    }

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

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