通过这种方式定义对象-测试object();

时间:2018-11-20 14:41:41

标签: c++

有一些错误,我找不到它们,所以感谢您的帮助。 错误:obj1.print(); obj2.print();

提示:表达式必须包含类类型。

更改代码并获得以下输出: TestClass1:0 TestClass2

注意:

  1. 请勿更改主要功能。
  2. 请勿添加或删除行。
  3. 请勿修改程序的结构。

`

struct TestClass1 {
    TestClass1(int i=0) {
        m_i = i;
    }
    void print() {
        cout << "TestClass1:" << m_i << endl;
    }
    int m_i;
};
class TestClass2 {
public:
    TestClass2(int) {}
    void print() {
        cout << "TestClass2" << endl;
    }
private:
    ~TestClass2() { }
};
int main() {
    TestClass1 obj1();
    TestClass2 obj2();
    obj1.print();
    obj2.print();
    return 0;
}

`

1 个答案:

答案 0 :(得分:0)

在不更改程序结构的情况下,我只能指出问题所在。

  1. TestClass2没有要在TestClass2 obj2();中初始化的默认构造函数
  2. TestClass2析构函数是私有的:“错误:类型为'TestClass2'的临时类型具有私有析构函数”
  3. 您没有指明要编译的标准,C ++ 17初始化对象的首选方法是使用大括号,例如:TestClass1 obj1{};或不使用括号:TestClass1 obj1;:“警告:解释为空括号作为函数声明[-Wvexing-parse]“
  4. 带有一个参数的构造函数应声明为explicit,以防止不必要的转换,除非您要这么做。

有了这些更改,运行时我得到以下输出:

TestClass1:0
TestClass2