编译g++时不在作用域内声明

not declare in scope when compiled g++

本文关键字:作用域 声明 g++ 编译      更新时间:2023-10-16

这是我的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;
}