无法正确组合

时间:2014-05-06 17:45:33

标签: c++ object-composition

我真的很尴尬,我不得不问,但我坚持这一点。

#include <iostream>
using namespace std;

class Obj
{
};


class Test
{
private:
  Obj a;

public:
  Test(Obj _a)
    : a(_a) 
  {}
};


int main() {

  Obj ob();
  Test t(ob);

  return 0;

}

我收到此错误:

t.cpp:24: error: no matching function for call to ‘Test::Test(Obj (&)())’
t.cpp:15: note: candidates are: Test::Test(Obj)
t.cpp:10: note:                 Test::Test(const Test&)

我不明白。相同的代码片段与内置类型(整数和东西)一起工作正常。

2 个答案:

答案 0 :(得分:4)

Obj ob();声明ob为不带参数的函数并返回Obj

如果您想默认构建Obj,请使用Obj ob;Obj ob{};

答案 1 :(得分:2)

这一行

Obj ob();

不会创建对象ob。它声明了一个不带任何输入的函数,并返回Obj

将其更改为:

Obj ob;