我才刚刚开始学习类,并且正在尝试编写一个非常简单的名为cat的代码。
在我的主文件,h文件和cpp文件中,它说“ Cat”类没有成员“ speak”,现在已经寻找了可能的解决方案,但找不到任何帮助。 如果我在我的h文件中放入无效的Cat :: speak(),它会纠正其他两个,但是它说“成员减速中不允许使用合格名称” //主要
#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;
}
答案 0 :(得分:1)
[[2,11,-10,-2],
[-2,-4,4,3],
[-7,-1,4,2]]
将其解释为void::speak(); //THE GLOBAL SCOPE HAS NO SPEAK
,其中以void ::speak()
开头的标识符(名称)表示C ++,“查找所有名称的全局范围”。 ::
是“范围分辨率运算符”
在头文件中,您应该只使用::
,因为C ++在类声明中看到了它,因此知道它是类的一部分。
答案 1 :(得分:0)
它甚至如何尝试编译以下行: "scripts": {
"start": "budo src/main.js:bundle.js --live -- -t [ babelify --presets [ env ] ]",
"build": "browserify src/main.js -o bundle.js -t [ babelify --presets [ env ] ]"
},
?
你什至是什么意思? void::speak();
名称空间中的方法speak()
?但是void
是保留的类型名称。而且,为什么它在班级里面呢?
据我猜测,您正尝试使用void
。
答案 2 :(得分:0)
main
我想我会回答这个问题。但是上面这行是你的问题。本质上,您要求程序执行的操作是查看package.json
名称空间的范围。但是,void::speak()
是保留的类型名称,据我所知,其中没有名为void
的函数。
这是void
的问题之一。通常,当您使用标准库中的内容时,以speak()
为例,您会说:“我需要在此处声明标准库中的字符串。using namespace std
是一个很好的例子。指出“字符串属于标准库范围。” string
是一种不好的做法,您会摸索尝试std::string hello
之类的事情,而该问题再次要求从void的命名空间中获取它。
也就是说,在类中,头文件通常用于声明以后将要使用的函数。在using namespace std
文件中,您只是说,我有一个类void::speak()
,在cpp
的范围内,我将使用函数Cat
。因此Cat
属于类speak()
,属于speak()
的范围。这就是为什么在Cat
文件中调用Cat
;
因此,总的来说,您的头文件应该是:
cpp