【发布时间】:2016-02-26 03:12:00
【问题描述】:
我在尝试初始化构造函数时发现了一些奇怪的错误。如果我只是展示它们是最简单的。
#include <iostream>
class MyClass {
public:
int var1, var2, var3;
MyClass() {
var1, var2, var3 = 0;
}
MyClass(int one, int two, int three) {
var1 = one;
var2 = two;
var3 = three;
}
};
int main()
{
MyClass object1(5, 6, 7);
std::cout << object1.var1; // This works
MyClass object2();
std::cout << object2.var1; //Error object must have class type.
MyClass object3 = MyClass();
std::cout << object3.var1; //Now it works for some reason
delete &object1;
MyClass ojbect1(5, 6, 7); //error redefinition; multiple initialization
}
如您所见,出于某种原因,当我初始化 object2 时,不会打印值,除非与 object3 一样,语法写为 MyClass object3 = MyClass();
此外,当我删除 object1 时,我必须使用 & 运算符。考虑到这个问题Deleting an object in C++ 他们不使用与号,这让我感到惊讶。
最后,当我尝试重新初始化 myobject 时,编译器抱怨有多个定义。我尝试省略 MyClass 关键字,但仍然不允许。
现在我当然可以用各种变通方法让程序做我想做的事,但是我不明白为什么这些事情不能像我在这里写的那样做。
【问题讨论】:
-
你创建了一个
myobj2,然后你打印了'myobj.var1'是这个错字吗? -
o_O 你为什么要
delete一个局部变量? -
默认初始化语法类似于
MyClass obj;,而不是MyClass obj();。第二个其实是一个不带参数返回MyClass的函数。 -
请重新检查您的代码,它与您评论的错误不一致。尤其是输出语句。
-
他们在另一个问题中不必使用
&的原因是delete的参数是指针变量,而不是类类型的变量。
标签: c++ oop constructor delete-operator object-initialization