我正在尝试学习如何使用常量函数和对象,但是,我遇到了一些错误,使我无法正常工作一个多小时,而且似乎无法弄清楚。我遵循的是一个简单的示例,我想我一路迷路了。这是我的代码。

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,则代码可以正常执行。但这仍然是一个不变的对象吗?感谢您的帮助,希望我能提供足够的信息。如果有关系的话,我正在使用代码块。

最佳答案

您的ExampleClassPOD (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/

10-12 12:19