班级没有成员发言? [关闭]

Posted

技术标签:

【中文标题】班级没有成员发言? [关闭]【英文标题】:Class has no member speak? [closed] 【发布时间】:2018-10-29 00:31:32 【问题描述】:

我刚刚开始学习类,我正在尝试编写一个非常简单的代码,称为 cat。

在我的 main、h 和 cpp 文件中,它说“Cat”类没有成员“speak”现在正在寻找可能的解决方案,但找不到任何帮助。 如果我将 void Cat::speak() 放入我的 h 文件中,它会更正其他两个,但随后会显示“成员减速中不允许使用限定名称” //主要

#include <iostream>
#include "Cat.h"

using namespace std;

int main() 

Cat jim;

jim.speak(); //CLASS "CAT" HAS NO MEMBER "SPEAK"

return 0;

//cat.h

#pragma once

#ifndef CAT_H_
#define CAT_H_

class Cat 
public:
void::speak(); //THE GLOBAL SCOPE HAS NO SPEAK
;

#endif /*CAT_H_*/

//cat.cpp

#include <iostream>
#include "Cat.h"

using namespace std;

void Cat::speak()      //CLASS "CAT" HAS NO MEMBER "SPEAK"
cout << "Meow!" << endl;

【问题讨论】:

在你的头文件中,使用void speak();而不是void::speak(); 【参考方案1】:

void::speak(); //THE GLOBAL SCOPE HAS NO SPEAK

将其解释为void ::speak(),其中以:: 开头的标识符(名称)表示C++,“查看所有名称的全局范围”。 :: 是“范围解析运算符”

在头文件中,你应该只使用void speak();,因为 C++ 在你的类声明中看到它,因此知道它是类的一部分。

【讨论】:

谢谢你,我注意到这些细节很慢。 没问题,如果它解决了您的问题,请务必使用复选标记将其标记为已接受的答案。【参考方案2】:

它甚至是如何尝试编译这一行的:void::speak();? 你到底是什么意思? void 命名空间内的方法 speak()?但void 是保留的类型名。再说了,为什么会在类里面呢?

我猜到了,您试图改用 void speak();

【讨论】:

是的,我认为这是一个更大的问题,结果它是我能遇到的最小的问题。谢谢【参考方案3】:

void::speak()

我想我会附和这个答案。但是上面的行是你的问题。本质上,您要求程序做的是查看void 命名空间的范围。但是,void 是保留的类型名,据我所知,其中没有名为 speak() 的函数。

这是using namespace std 的问题之一。通常,当您使用标准库中的某些内容时,以string 为例,您会说:“我需要在此处声明一个来自标准库的字符串。std::string hello 是一个非常好的示例,它指出,”字符串属于标准库范围。”using namespace std 是不好的做法,你会摸索尝试像 void::speak() 这样的东西,这又是要求从 void 的命名空间中获取它。

话虽如此,在类中,头文件通常用于声明稍后将使用的函数。在cpp 文件中,您只是说,我有一个类Cat 并且在Cat 的范围内我将使用函数speak()。所以speak() 属于Cat 类,并且在Cat 的范围内。这就是为什么在cpp 文件中,您调用void Cat::speak()

总而言之,你的头文件应该是:

class Cat

  public:
    void speak(); // the class has a public function named speak.
;

【讨论】:

以上是关于班级没有成员发言? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

列为班级成员

scrum站立会议

SCRUM站立会议

为啥我没有编码时我的班级正在执行算术?

修改第二周站立会议

转载正衡中学八年级期中表彰第一名同学的发言稿 - 孔瑞阳