我在这个例子中创建了一个基本上充当公共结构的类,假设类名是X
。我想在main函数中声明一个本地对象。我的问题的简短版本是:我知道我们可以做X foo;
,但我认为X foo();
(附加一对括号)应该可行,我认为第一次使用实际上是第二次使用的简写用法。整个代码如下:
#include <iostream>
using namespace std;
class X {
public:
int val1;
int val2;
};
int main() {
X a;
X b(); // A warning here
X *c = new X;
X *d = new X();
cout << "val of a: " << a.val1 << " " << a.val2 << endl;
cout << "val of b: " << b.val1 << " " << b.val2 << endl; // Compile error
cout << "val of c: " << c->val1 << " " << c->val2 << endl;
cout << "val of d: " << d->val1 << " " << d->val2 << endl;
return 0;
}
编译器抱怨:
11_stack.cpp:16:6: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
X ab();
^~
11_stack.cpp:16:6: note: replace parentheses with an initializer to declare a variable
X ab();
^~
{}
11_stack.cpp:22:26: error: use of undeclared identifier 'b'
cout << "val of b: " << b.val1 << " " << b.val2 << endl;
^
11_stack.cpp:22:43: error: use of undeclared identifier 'b'
cout << "val of b: " << b.val1 << " " << b.val2 << endl;
^
1 warning and 2 errors generated.
我最初的猜测如下:
operator()
。但后来我反驳了这两个假设。我们可以看到代码中的第一个反对:X *c = new X;
和X *d = new X();
都有效。对于第二个,我添加了这样的附加代码:
a();
然后我收到了编译错误消息:
11_stack.cpp:26:2: error: type 'X' does not provide a call operator
a();
^
究竟是什么导致错误?
工作环境:
P.S。如果它太模糊,还请帮我思考一个更好的描述性帖子标题......
答案 0 :(得分:0)
c
和d
是指针,因此您需要c->val1
而不是.
。