C++ 班上没有成员发言吗?

C++ 班上没有成员发言吗?,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() {

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

在我的主、h和cpp文件中,它说类“Cat”没有成员“speak”,暂时寻找可能的解决方案,但找不到任何帮助。 如果我将void Cat::speak()放在我的h文件中,它会更正另外两个,但它会说“成员中不允许使用限定名” //主要

//cat.cpp

#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”
cout
void::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.
};