编译g++时不在作用域内声明
not declare in scope when compiled g++
这是我的A.h文件
class A
{
public:
void menuChoice();
void displaystartingMenu(); //EDIT
};
这是我的a.p文件
#include "A.h"
void displaystartingMenu()
{
cout<<"Please enter your choice:";
}
void A::menuChoice()
{
displaystartingMenu();
cout<<"Hello"<<endl;
}
int main()
{
A a;
a.menuChoice();
}
i tried to put
void menuChoice();
在我的CPP文件的顶部,但它仍然不会编译。提示错误
函数' int main() ': A.cpp:112:13: error: ' menuChoice '未在此作用域中声明
如何编译:g++ a.p p A.h
By right我甚至不需要声明cpp的顶部函数,因为我已经在我的头文件中声明了它,并且我已经包含在我的。cpp中。这里出了什么问题?
编辑:错误:
In function `A::menuChoice()':
A.cpp:(.text+0x229): undefined reference to `A::displaystartingMenu()'
选项1:创建一个A
实例并调用该实例的menuChoice
方法:
#include <iostream>
class A {
public:
void menuChoice();
};
void A::menuChoice() {
std::cout << "Hello" << std::endl;
}
int main() {
A a;
a.menuChoice();
return 0;
}
选项2:使menuChoice
为静态方法,并将其称为A::menuChoice
:
#include <iostream>
class A {
public:
static void menuChoice();
};
void A::menuChoice() {
std::cout << "Hello" << std::endl;
}
int main() {
A::menuChoice();
return 0;
}
编辑:解决新问题,当你试图定义A::displaystartingMenu
时,你写:
void displaystartingMenu() {
// ...
}
必须这样定义:
void A::displaystartingMenu() {
// ...
}
menuChoice是类a的非静态成员函数。为了调用它,您需要实例化对象a,如下所示
int main()
{
A a;
a.menuChoice();
return 0;
}
相关文章:
- 未在作用域中声明unordered_map
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 未在此作用域中声明的函数和变量 (C++)
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 重载时未在 C++ 的作用域错误中声明
- 在 C++ 中使用 "transform" 会给出一个错误,指出这未在作用域中声明
- Tictactoe 游戏变量未在作用域中声明
- 当变量在多个函数作用域中使用时,我应该在类 private 中声明该变量吗?
- 如何在C++中嵌套词法作用域可访问的作用域中声明静态信息?
- gets()未在作用域中声明
- 在C++14中,在哪个作用域中声明了重新声明枚举的非范围枚举器
- C++11 外部作用域变量声明为 auto
- 未在此作用域中声明类 (c++)
- 如何声明在函数作用域中定义的结构
- 未在此作用域中声明函数,即使存在头文件也是如此
- 变量声明中结构的作用域解析是什么意思
- 在C++中,在给定的相同作用域内声明相同的变量名
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 类未在作用域中声明,但已声明该类
- 使用新的外部函数作用域声明和初始化变量