2016-10-18 5 views
0

Это мой Ah файлне декларировать объем при компиляции г ++

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();

Как скомпилировать: г ++ a.cpp Ах

по праву мне не нужно даже объявлять функцию верхней части CPP, потому что я уже объявим его в моем файл заголовка, и я включил его в свой .cpp. Что здесь не так?

EDIT:

Ошибка:

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

Вы имели в виду 'A a; a.menuChoice(); '? – songyuanyao

+1

Вам нужен экземпляр 'A', прежде чем вы сможете вызывать функции в' A'. Вот как работают классы. Если вы этого не хотите, не используйте класс. – immibis

+0

, но что, если у меня есть еще один метод(), который уже объявлен публичным в классе для размещения внутри menuchoice(); , я должен сделать экземпляр A в menuchoice(); также? if method() является просто cout @immibis – what

ответ

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() { 
    // ... 
} 

Должно быть определено как t его:

void A::displaystartingMenu() { 
    // ... 
} 
+0

, но что, если у меня есть другой метод(); быть размещенным внутри menuchoice(); , я должен сделать то же самое в menuchoice(); также? – what

+0

@ user2601570, 'menuChoice' - это метод, вы не можете поместить в него другой метод. У вас может быть отдельный метод, который вы вызываете из 'menuChoice', это то, что вы имеете в виду? – asimes

+0

Нет, если у меня есть метод, уже объявленный в классе, тогда я вызываю его внутри menuchoice(); он не работает, он говорит о неопределенной ссылке – what

3

menuChoice не является статической функции-члена класса А. Для того, чтобы назвать его вам нужно создать экземпляр объекта А, как следует

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

    return 0; 
}