2013-12-15 5 views
0

Я добавил новую функцию в свою библиотеку и при компиляции Gcc отказываюсь ее распознавать. Каждая функция работает без проблем, и это единственная проблема, которая дает проблему.Неопределенная ссылка на «Str :: ToInt (unsigned char *)»

String.hpp

#ifndef __String_Included__ 
#define __String_Included__ 

namespace Str 
{ 
    //Other prototype 
    int ToInt(unsigned char*); 
}; 
#endif 

String.cpp

int ToInt(unsigned char* Source) 
{ 
    //Codecodecodecodecodecodecode 
} 

Когда я звоню ул :: ToInt в основном я получаю эту ошибку. Я работаю на CodeBlocks 12.11 и Windows 8

+0

Вы не выкладываю полный код (по крайней мере, один '# endif' не хватает). Предполагая, что это в противном случае завершено, ваш файл cpp пропускает пространство имен. –

+2

Вы не определили 'Str :: toInt', вы определили' toInt' ... –

+1

Обратите внимание, что имена, включая двойные символы подчеркивания, зарезервированы для реализации (компилятор C++ и его стандартная библиотека). Вам разрешено произносить их только при наличии явного разрешения (например, явное разрешение предоставляется на использование '__FILE__' и' __LINE__'). –

ответ

2

Вы объявили Str::ToInt() в качестве члена пространства имен Str но вы определили функцию вне любого пространства имен с тем же именем ToInt(). Вы должны, по крайней мере, Str:: перед определением:

int Str::ToInt(unsigned char* Source) { ... } 
+0

Вы также можете обернуть определение функции в 'namespace Str {...}'. Компилятор будет «объединять» два или более блока 'namespace Str {...}'. Немного меньше набрав, если у вас много функций в пространстве имен. –

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