2014-01-14 4 views
1

у меня есть три файла method.h, method.cpp, main.cppНеопределенная ссылка на методы класса

method.h

#ifndef METHOD_H 
#define METHOD_H 

class method { 

public: 
     void printThisMethod(); 
private: 

}; 

#endif 

method.cpp

#include "method.h" 
inline void method::printThisMethod() { 
    //some methods done here 
} 

main.cpp

#include <iostream> 
#include <string> 
#include "method.h" 

int main() { 
    method outputMethod; 
    outputMethod.printThisMethod; 
} 

Я получаю ошибку,

undefined reference to method::printThisMethod. 

Пожалуйста, помогите спасибо

+0

Удалите инлайн ключевое слово. – sajas

+0

Ошибка ссылки? Как вы это строите? – doctorlove

+0

Если я удалю его, у меня будет ошибка множественного определения метода :: printThisMethod(), как я использовал «printThisMethod» в некоторых моих функциях, кроме других – user3193812

ответ

3

Либо удалите inline ключевое слово, или вынести определение в заголовок (сохраняя inline).

inline используется для ослабления правила Единого определения, чтобы разрешать определения в заголовках. Тем не менее, это также требует определение в каждой единицы перевода, которая его использует, что часто требует определения в заголовке.

Без inline применяются нормальные правила привязки, и в одной единицы перевода должно быть одно определение. Это то, что вы будете иметь, если вы удалите inline из вашего существующего кода.

(Вы также должны добавить круглые скобки при вызове функции, outputMethod.printThisMethod(), но предположительно ваш реальный код имеет их, в противном случае он бы не получить как ошибки связи.)

+0

Если я удалю его, у меня будет ошибка с множественным определением метода :: printThisMethod(), поскольку я использовал «printThisMethod» в некоторых моих функциях, кроме основных – user3193812

+0

@ user3193812: Вы не должны получать эту ошибку, так как вы только определите его в одном исходном файле. (Если вы не делаете что-то сумасшедшее, например, включая исходный файл вместо заголовка, но ваш пример, конечно же, не делает ничего подобного). –

+0

, но это то, что я видел на выходе из моего netbeans 7.4 – user3193812

0

Вы должны изменить

outputMethod.printThisMethod; 

в

outputMethod.printThisMethod(); 
+0

все еще получает ошибку – user3193812

+0

Также удалите ключевое слово 'inline' из метода method.cpp. Если вы хотите использовать inline член класса, вы должны поместить его в заголовок. – tillaert

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