编译 g++ 时不在范围内声明
not declare in scope when compiled g++
这是我的 A.h 文件
class A
{
public:
void menuChoice();
void displaystartingMenu(); //EDIT
};
这是我的 A.cpp 文件
#include "A.h"
void displaystartingMenu()
{
cout<<"Please enter your choice:";
}
void A::menuChoice()
{
displaystartingMenu();
cout<<"Hello"<<endl;
}
int main()
{
A a;
a.menuChoice();
}
我试着把
void menuChoice();
在我的 cpp 文件的顶部,但它仍然无法编译。它给我错误
In function ‘int main()’: A.cpp:112:13: error: ‘menuChoice’ was not declared in this scope menuChoice();
我如何编译:g++ A.cpp A.h
没错,我什至不需要在 cpp 的顶部声明函数,因为我已经在我的头文件中声明了它,并且我已经包含在我的 .cpp 中。这里出了什么问题?
编辑:
错误:
In function `A::menuChoice()':
A.cpp:(.text+0x229): undefined reference to `A::displaystartingMenu()'
menuChoice是classA的非静态成员函数,为了调用它需要实例化一个对象A,如下
int main()
{
A a;
a.menuChoice();
return 0;
}
选项 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() {
// ...
}
这是我的 A.h 文件
class A
{
public:
void menuChoice();
void displaystartingMenu(); //EDIT
};
这是我的 A.cpp 文件
#include "A.h"
void displaystartingMenu()
{
cout<<"Please enter your choice:";
}
void A::menuChoice()
{
displaystartingMenu();
cout<<"Hello"<<endl;
}
int main()
{
A a;
a.menuChoice();
}
我试着把
void menuChoice();
在我的 cpp 文件的顶部,但它仍然无法编译。它给我错误
In function ‘int main()’: A.cpp:112:13: error: ‘menuChoice’ was not declared in this scope menuChoice();
我如何编译:g++ A.cpp A.h
没错,我什至不需要在 cpp 的顶部声明函数,因为我已经在我的头文件中声明了它,并且我已经包含在我的 .cpp 中。这里出了什么问题?
编辑:
错误:
In function `A::menuChoice()':
A.cpp:(.text+0x229): undefined reference to `A::displaystartingMenu()'
menuChoice是classA的非静态成员函数,为了调用它需要实例化一个对象A,如下
int main()
{
A a;
a.menuChoice();
return 0;
}
选项 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() {
// ...
}