C++构造函数无输出问题咨询:终端未显预期内容原因?
为什么构造函数的cout输出没显示?
你这段代码的问题出在main.cpp里的这一行:
DataVars dataVars();
看起来你是想创建一个DataVars类的对象,但C++编译器会把这行代码解析成一个函数声明——声明了一个名为dataVars、返回DataVars类型、没有参数的函数,而不是实例化一个对象!
因为根本没有创建对象,构造函数自然不会被调用,所以你看不到constructor?和Getting csv data!的输出。
解决办法
把那行代码改成下面两种写法之一就行:
- C++98及更早版本:
DataVars dataVars; - C++11及以后版本(更推荐,能避免歧义):
DataVars dataVars{};
修改后重新用你的编译命令:
g++ main.cpp data_vars_class.cpp -o a.out
运行./a.out就能看到构造函数里的输出了。
补充说明
这种语法歧义是C里的经典坑点,当你写Type name();时,编译器总会优先把它当作函数声明,而不是对象初始化。用{}初始化是C11引入的列表初始化语法,能有效避免这类解析歧义。
内容的提问来源于stack exchange,提问作者Geoff L
相关产品推荐
相关产品推荐

