2014-12-27 3 views
-5

Я новичок в C++, но имел некоторый опыт работы с java. Я пытаюсь создать класс, но когда я попытаться сделать новый метод в классе я получаю несколько ошибки (это мой файл .cpp)Невозможно создать метод в классе

//.cpp file 
#include "Test.h" 
#include "Test.h" 
#include <iostream>//unresolved inclusion 
using namespace std; 

void speak() { 

    if (happy) {//Symbol hapy could not be resolved 
     cout << "Meouw!" << endl; 
    } else { 
     cout << "Ssssss!" << endl; 
    } 
} 

void Test::makeHappy() { // member decleration not found 
    happy = true;//Symbol hapy could not be resolved 
} 

void Test::makeSad() { // member decleration not found 
    happy = false;//Symbol hapy could not be resolved 
} 

я не получаем никаких ошибок в моем файле хедер, но включили его только в случае, если

#ifndef TEST_H_ 
 
#define TEST_H_ 
 

 
class Test { 
 
private: 
 
\t bool happy; 
 

 
public: 
 
\t void makeHappy(); 
 
\t void makeSad(); 
 
\t void speak(); 
 
}; 
 

 
#endif /* TEST_H_ */ 
 

 
Finally I have another .cpp file I use which also gets errors 
 

 
#include <iostream>//unresolved inclusion 
 
#include "Test.h" 
 
#include "Test.cpp" 
 
using namespace std; 
 

 
int main() { 
 
\t Test jim; 
 
\t jim.makeHappy();//method make happy could not be resolved 
 
\t jim.speak();//method speak could not be resolved 
 

 
\t Test bob; 
 
\t bob.makeSad();//method make happy could not be resolved 
 
\t bob.speak();//method speak could not be resolved 
 

 
\t return 0; 
 
} 
 
This is the new error message I get when compiling 
 

 
<!-- begin snippet: js hide: false -->

Извините, если этот вопрос является открытым закончилась, но я просто не могу найти ответы в другом месте.

+1

Изменения в 'ничтожной Test :: говорят() { 'как это сделано с другими методами. –

+1

Общее правило: исправить первую проблему. Часто компилятор путается ошибками, а дальнейшие ошибки исчезают, если исправлены предыдущие ошибки. – gnasher729

+1

Очень важно, чтобы другие комментарии и ответы отсутствовали: Не включайте файл .cpp. – Chris

ответ

0

это ваш заголовочный файл test.h:

  1. счастливый член был назван bhappy_
  2. для частного члена думать, чтобы добавить геттер и сеттер функции-члены

#ifndef TEST_H_ 
 
#define TEST_H_ 
 

 
class Test { 
 
private: 
 
\t bool bhappy_; 
 
public: 
 
    Test() // ctor 
 
    virtual ~Test() // dtor 
 
public: 
 
\t void makeHappy(); 
 
\t void makeSad(); 
 
\t void speak(); 
 
}; 
 

 
#endif /* TEST_H_ */

это ваш Test.c pp файл:

  1. Не рекомендуется использовать использование пространства имен std;
  2. Не включайте ваш заголовок два раза

//.cpp file 
 
#include "Test.h" 
 
#include <iostream>//unresolved inclusion 
 

 
//ctor 
 
Test::Test() : bhappy_(false) 
 
{} 
 

 
Test::~Test(){} 
 

 
void Test::speak() { 
 

 
    if (bhappy_) {//Symbol hapy could not be resolved 
 
     std::cout << "Meouw!" << endl; 
 
    } else { 
 
     std::cout << "Ssssss!" << endl; 
 
    } 
 
} 
 

 
void Test::makeHappy() { 
 
    bhappy_ = true;//Symbol hapy could not be resolved 
 
} 
 

 
void Test::makeSad() { // member decleration not found 
 
    bhappy_ = false;//Symbol hapy could not be resolved 
 
}

Это ваша основная функция:

#include "Test.h" 

int main(int argc, char** argv) { 
    Test jim; 
    jim.makeHappy();//method make happy could not be resolved 
    jim.speak();//method speak could not be resolved 

    Test bob; 
    bob.makeSad();//method make happy could not be resolved 
    bob.speak();//method speak could not be resolved 

    return 0; 
} 
+0

Это фиксировало ошибки, за исключением того, что все еще говорит, что символ bhappy_ не может быть разрешен. На «Test :: Test(): bhappy_ (false)« Я получаю сообщение »Member happy не был инициализирован в этом конструкторе. Также, если я не включаю« using namespace std », я получаю сообщение об ошибке с сообщением cout и endl не удалось решить. – hm3293

+0

Посмотрите на новое редактирование, оно должно исправить все ошибки компиляции.удачи –

+0

Теперь я получаю эту ошибку: no 'void Test :: makeHappy() 'функция-член объявлена ​​в классе' Test'. Также почему не рекомендуется использовать пространство имен std. Я мог бы просто удалить и переустановить мой компилятор, если это может быть проблемой. Спасибо за помощь!! – hm3293

-1

Необходимо указать Test :: speak(). Take должен использовать это. использовать атрибут класса. Подумайте о геттере и сеттере.

И, наконец, посмотрите обучение C++, это должно быть полезно ^^.

До встречи.

Смежные вопросы