【问题标题】:C++ class definitions inside header files头文件中的 C++ 类定义
【发布时间】:2012-04-03 16:00:05
【问题描述】:

我目前正在开始使用 C++。对于我目前正在做的作业,我必须在一个头文件中定义多个类。我不确定我是否做对了。这是我正在尝试做的示例。

//classOne.h
class classOne{
    public:
        classOne();
        ~classOne();
        class classInsideClass{
            public:
                classInsideClass
                void hello();
                void print();
        };

}

(我跳过了这个示例中的一些代码,例如 classOne 的构造函数)

//classOne.cpp
classOne::classInsideClass::classInsideClass(){}
classOne::classInsideClass::hello(){
    cout << ""Hello <<endl;
}

//main.cpp
classOne callingClass;
callingClass.classInsideClass.hello;

我在 classOne 的头文件中定义了一个类。我已经在 classOne 的 cpp 中为这个 classInsideClass 创建了函数。这是正确的说法,classInsideClass 属于 classOne,还是我不允许这样做?

我是否在 main.cpp 中正确调用了 classInsideClass 的函数?当我尝试运行它时,出现以下错误;

错误:'class classOne::classInsideClass 的使用无效

如果我不尝试在 main.cpp 中调用 classInsideClass 的函数,它就可以正常运行。

提前致谢。

【问题讨论】:

  • 你的意思是void classOne::classInsideClass::hello()
  • 既然 hello 是一个函数,我会尝试调用Call::classInsideClass.hello();
  • @Glenn:使用:: 而不是.,因为classInsideClass 是一个类而不是一个对象。

标签: c++ class header


【解决方案1】:

classInsideClassclassOne 内部的一个type,而不是一个对象。如果你想调用classInsideClass::hello(),你需要一个classInsideClass的实际instance

classOne::classInsideClass callingClass;
callingClass.hello();

【讨论】:

  • ... 除非 hello 声明为 static,这意味着它不适用于特定对象,因此没有 this 指针,在这种情况下,它将被称为:@ 987654329@
  • 而且根据原帖,你好并没有声明为静态
  • 谢谢!我现在看到我在原始帖子中犯了一些错字,但这就是我要问的。对错别字表示歉意,并感谢您的解决方案:)
  • @user1005253 :将来,通过将 您的实际代码 粘贴到您的问题中来避免拼写错误,而不仅仅是它的一些近似值。 ;-]
【解决方案2】:
//classOne.h
...
        class classInsideClass{
            public:
                classInsideClass();
                void hello();
        };

这里你错过了构造函数定义末尾的括号。

void classOne::classInsideClass::hello(){
    cout << "Hello" <<endl;
}

这里缺少函数返回类型,引号应该在字符串周围。

祝你好运!

【讨论】:

  • Opps,我在原帖中犯了一些错别字。为此事道歉。我只是快速编写了一个示例代码。您指出的这两个问题都不会出现在我的原始代码中。为这些错误道歉,这实际上浪费了其他人的时间。不过谢谢你:)
【解决方案3】:

试试:

//main.cpp
classOne::classInsideClass internalClassObject;
internalClassObject.hello();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2015-06-05
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多