C++ 班上没有成员发言吗?
我刚刚开始学习类,我正在尝试编写一个名为cat的非常简单的代码 在我的主、h和cpp文件中,它说类“Cat”没有成员“speak”,暂时寻找可能的解决方案,但找不到任何帮助。 如果我将void Cat::speak()放在我的h文件中,它会更正另外两个,但它会说“成员中不允许使用限定名” //主要 //cat.cppC++ 班上没有成员发言吗?,c++,visual-c++,C++,Visual C++,我刚刚开始学习类,我正在尝试编写一个名为cat的非常简单的代码 在我的主、h和cpp文件中,它说类“Cat”没有成员“speak”,暂时寻找可能的解决方案,但找不到任何帮助。 如果我将void Cat::speak()放在我的h文件中,它会更正另外两个,但它会说“成员中不允许使用限定名” //主要 //cat.cpp #include <iostream> #include "Cat.h" using namespace std; void Cat::speak() {
#include <iostream>
#include "Cat.h"
using namespace std;
void Cat::speak() { //CLASS "CAT" HAS NO MEMBER "SPEAK"
cout << "Meow!" << endl;
}
#包括
#包括“h类”
使用名称空间std;
void Cat::speak(){//类“Cat”没有成员“speak”
coutvoid::speak();//全局作用域没有speak
解释为“代码>空格::Script())/>代码:在一个标识符(名称)中使用<代码>::/COD>指向C++,“查看所有名称的全局范围”。<代码>::/>代码>“范围解析运算符”< /P>
在头文件中,你应该只使用<代码>无效的说话者(;)/<代码>,因为C++在类声明中看到它,因此知道它是类的一部分。
它甚至如何编译这行:<代码> Val::Script()?
你说它是什么意思?方法speak()
在void
命名空间中?但是void
是一个保留的类型名。而且,为什么它在类中呢
正如我所猜测的,您试图使用void-speak();
。void::speak()
我想我会插话回答这个问题。但上面这一行是你的问题。本质上,你要求程序做的是查看void
命名空间的范围。但是,void
是一个保留的类型名,据我所知,其中没有名为speak()
的函数
这是使用namespace std
的问题之一。通常,当您使用标准库中的内容时,以string
为例,您会说,“我需要在这里声明一个标准库中的字符串。std::string hello
,这是一个非常好的示例,”字符串属于标准库范围。“使用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.
};
在头文件中,使用void speak();
而不是void::speak()
谢谢你显然我对这些细节注意得太慢了。没问题,如果它解决了你的问题,请务必用复选标记将其标记为已接受的答案。是的,我是,我认为这是一个更大的问题,但这是我能遇到的最小问题。谢谢
#include <iostream>
#include "Cat.h"
using namespace std;
void Cat::speak() { //CLASS "CAT" HAS NO MEMBER "SPEAK"
cout << "Meow!" << endl;
}
class Cat
{
public:
void speak(); // the class has a public function named speak.
};