为什么编译器没有将此标记为错误而不是警告?

时间:2012-07-08 21:06:48

标签: c++ visual-studio-2008 visual-c++

#include <iostream>

using namespace std;

class test{
public:
    test() { cout<<"CTOR"<<endl; }
    ~test() { cout<<"DTOR"<<endl; }
};

int main()
{
 test testObj();
 cout<<"HERE"<<endl;

} 

输出:

HERE

编译器跳过“test testObj();”行并用警告编译其余部分,并在运行时生成输出。警告是“VC ++ 2008中没有调用原型函数(是一个变量定义?)。为什么它不会抛出错误?

3 个答案:

答案 0 :(得分:8)

因为这不是错误。

你的代码与most-vexing parse相违背(总之,test testObj();没有定义变量,它声明了一个函数)。

答案 1 :(得分:3)

简单地说,因为声明一个函数(如您声明的函数)并不是错误的。但是,警告应该足够有用了。

答案 2 :(得分:1)

从Main

中的构造函数调用中删除()
int main()
{
    test testObj;
    cout<<"HERE"<<endl;
}