班级没有成员发言? [关闭]
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.
;
【讨论】:
以上是关于班级没有成员发言? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章