2013-07-05 4 views
6

У меня проблема с доступом к функции из класса с объектом класса в моей основной. Я просто пытаюсь сделать объект для класса и использовать этот объект для доступа к функции внутри этого .cpp-файла этого класса. Я продолжаю получать ошибку, и я даже попробовал простейшую программу для ее проверки, и я все еще получаю сообщение об ошибке.Класс C++ не имеет имени с именем

Главная:

#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 

Класс заголовка

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack 
{ 
    public: 
     Attack(); 
     void printShiz(); 
    protected: 
    private: 
}; 

#endif // ATTACK_H 

Класс .cpp

#include <iostream> 
#include "Attack.h" 
using namespace std; 

Attack::Attack(){ 

} 

void Attack::printShiz(){ 
    cout << "Test" << endl; 
} 

Как исправить эту ошибку? Каждый раз, когда я пытаюсь получить доступ к функции printShiz в классе Attack с помощью объекта в моей основной, я получаю сообщение об ошибке и не считает, что эта функция существует в этом классе.

Ошибка:

error: 'class Attack' has no member named 'printShiz' 
+1

Код выглядит хорошо. Возможно, он пытается использовать более старую версию заголовка. – chris

+3

Иногда «Перестроить все» исправить все. – johnchen902

+0

Просто попробовал, получив ту же ошибку:/ – Rapture686

ответ

0

Вы не забыли включить закрывающую скобку в основной?

#include <iostream> 
#include "Attack.h" 

using namespace std; 

int main() 
{ 
    Attack attackObj; 
    attackObj.printShiz(); 
} 
+0

Да, что есть, я просто случайно оставил его вне поля. – Rapture686

-1

Попытка определить функции прямо в заголовок

#ifndef ATTACK_H 
#define ATTACK_H 

class Attack { 
    public: 
     Attack(){}; 
     void printShiz(){}; 
    protected: 
    private: }; 

#endif // ATTACK_H 

и компилировать. Если компилятор не жалуется на дубликаты определений, это означает, что вы забыли скомпилировать файл Class.cpp, тогда вам просто нужно это сделать (добавьте его в свой Makefile/проект/решение ... какую инструментальную цепочку вы используете?)

+0

Инструментарий, который я использую, это mingw32-g ++. Exe – Rapture686

+0

Как вы его компилируете? Окажите нам командную строку – doctorlove

+1

Если он «забыл компилировать Class.cpp», который дал бы неопределенную ошибку ссылки ссылки, а не ошибка компиляции, указанная –

10

У меня была аналогичная проблема. Оказалось, я включил старый файл заголовка с тем же именем из старой папки. Я удалил старый файл, изменив директиву #include, чтобы указать на мой новый файл, и все было хорошо.

+0

Это правильный ответ на вопрос. Иногда бывает. Вы копируете файл заголовка на другой путь и вносите в него изменения, но поскольку где-то в вашем проекте вы включаете старый заголовок, изменения в функциях-членах, переменных и т. Д. Никогда не появляются, и вы получаете такие «странные» ошибки. –

-1

Я знаю, что это год, но я просто наткнулся на него с той же проблемой. Моя проблема заключалась в том, что у меня не было конструктора в моем файле реализации. Я думаю, что проблема здесь может заключаться в комментариях в конце файла заголовка после #endif ...

0

У вас есть опечатка в вашем .h? Я однажды наткнулся на эту ошибку, когда у меня был метод, правильно названный в моем главном, но с опечаткой в ​​.h/.cpp («g» против «q» в имени метода, что сделало его любопытным). Подпадает под категорию "copy/paste error".

0

Не удалось найти ответ на вопрос, поэтому я попробовал и не ошибся.

я составил, как например:

g++ -c class.cpp

g++ -c main.cpp

g++ -o main class.o main.o

Там нет ошибки, хорошо работает. gcc версия б/у для скомпилирован. gcc версия 4.1.2 20080704 (Red Hat 4.1.2-46)

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