我正在尝试学习如何使用常量函数和对象,但是,我遇到了一些错误,使我无法正常工作一个多小时,而且似乎无法弄清楚。我遵循的是一个简单的示例,我想我一路迷路了。这是我的代码。
Main.cpp
#include <iostream>
#include "ExampleClass.h"
int main(){
ExampleClass exampleObj; // object used to call members of ExampleClass.
exampleObj.printText(); // calls printVar from the ExampleClass.
const ExampleClass constantObject; // object used to call constant members of ExampleClass.
constantObject.printConstText(); // calls printConstVar from the ExampleClass.
return 0;
}
ExampleClass.h
#ifndef EXAMPLECLASS_H
#define EXAMPLECLASS_H
class ExampleClass
{
public:
void printText();
void printConstText() const;
};
#endif // EXAMPLECLASS_H
ExampleClass.cpp
#include <iostream>
#include "ExampleClass.h"
void ExampleClass::printText(){
std::cout << "The code works!" << "\n";
}
void ExampleClass::printConstText() const{
std::cout << "The code works!" << "\n";
}
而且我得到了错误:
C:\Documents and Settings\Me\My Documents\ConstObjects\main.cpp||In function 'int main()':|
C:\Documents and Settings\Me\My Documents\ConstObjects\main.cpp|8|error: uninitialized const 'constantObject'|
||=== Build finished: 1 errors, 0 warnings ===|
如果我在ExampleClass之前取出const,则代码可以正常执行。但这仍然是一个不变的对象吗?感谢您的帮助,希望我能提供足够的信息。如果有关系的话,我正在使用代码块。
最佳答案
您的ExampleClass
是POD (plain old data)结构。当将其声明为像ExampleClass exampleObj
这样的局部变量时,不会调用默认构造函数,并且它将保持未初始化状态。
您需要创建自己的默认构造函数或使用以下语法-ExampleClass exampleObj = ExampleClass();
。这将创建一个临时的ExampleClass
对象,并值初始化您的exampoleObj
。
已更新:
这是C++ 03标准8.5.9的摘录。
这意味着constantObject
应该具有用户定义的默认构造函数,否则程序格式不正确,应该对其进行诊断。如果删除const,则该对象将始终保持未初始化状态(初始值不确定)
关于c++ - 常量对象和函数存在问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11965214/