编译g ++时不在范围内声明

时间:2016-10-18 03:37:47

标签: c++ linux ubuntu scope scope-resolution

这是我的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文件的顶部,但它仍然无法编译。它给了我错误

  

在函数'int main()'中:A.cpp:112:13:错误:'menuChoice'未在此范围中声明menuChoice();

我如何编译:g ++ A.cpp A.h

通过右边我甚至不需要声明cpp顶部的函数,因为我已经在我的头文件中声明它并且我已经包含在我的.cpp中。这里出了什么问题?

修改

错误:

 In function `A::menuChoice()':
A.cpp:(.text+0x229): undefined reference to `A::displaystartingMenu()'

2 个答案:

答案 0 :(得分:3)

menuChoice是A类的非静态成员函数。为了调用它,您需要实例化一个对象A,如下所示

int main()
{
  A a;
  a.menuChoice();

  return 0;
}

答案 1 :(得分:3)

选项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() {
    // ...
}
相关问题