班上没有成员说话?

时间:2018-10-29 00:31:32

标签: c++ visual-c++

我才刚刚开始学习类,并且正在尝试编写一个非常简单的名为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;
}

3 个答案:

答案 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