2011-12-22 2 views
1

я пытаюсь составить простую тестовую программу, и один из заголовочных файлов я в том числе имеет следующие ЬурейеЕг ++ ошибка относительно неопределенной ссылки на TYPEDEF

typedef const char* CharConst; 
typedef unsigned int MyBool; 

позже в файле заголовка, некоторые функции определены используя этот typedef. такие вещи, как:

MyBool add_att(CharConst attr, const char*); 

я получаю ошибку, когда я пытаюсь сделать вызов этой функции, с вызовом, как:

CharConst myconst = "some text"; 
const char* more_text = "more text"; 
add_att(myconst, more_text); 

ошибка является: неопределенная ссылка на `MyClass :: add_att (char const *, char const *) '

кажется, что компилятору не нравится тот факт, что первый аргумент был typedef'd в файле заголовка. но это не против MyBool. компилятор только жалуется на определение CharConst.

есть ли простой способ исправить это? любые подсказки или намеки на то, что я могу сделать? я запускаю gcc версии 4.6.2

+2

Показать подпись функции в определении. Также никогда не используйте 'typedef' в типах указателей, это запутывает, а такие проблемы всегда ползут вместе с ним. –

+0

Вы включили заголовочный файл, который объявил/определил 'add_att()' в файле, который вы пытались вызвать эту функцию? Определяется ли 'add_att()' в lib, и вы забыли связать с этим lib? –

+0

«typedef» не должен иметь никакого значения (за исключением путаницы с людьми, которые пытаются прочитать код). Похоже, либо вы не реализовали эту функцию, либо не связываетесь с файлом, который содержит его реализацию. –

ответ

0

Из-за ошибки это выглядит как add_att - метод класса; Я не вижу экземпляр вашего класса для вызова метода. Рассмотрим это: MyClass * m = new MyClass(); m-> add_att (....)

В качестве альтернативы, убедитесь, что функция фактически определена, а не только прототипирована. Кроме того, это может не иметь значения, но во время определения функции - вы используете typedef в аргументах функции? На самом деле это не имеет значения ... Тип - то же самое.

+0

Я смотрел дальше. Оказывается, моя версия gcc (которая очень новая) еще не играет со статической связью, и мне нужно статически связывать эту библиотеку (файлы .a). Я перекомпилирую библиотеку для использования общих объектов (что странно не является способом по умолчанию для этой библиотеки). повторит это в ближайшее время. – jasonmclose

+0

Это вполне может быть так; Однако постарайтесь не обвинять компилятор, если вы не протестировали его с другой версией на том же оборудовании. Я люблю обвинять компилятор и водителей (мальчик, я люблю обвинять водителей!) Но в большинстве случаев это что-то на вашем конце или в другой библиотеке. Попробуйте тестирование с другой версией GCC; Хотя 4.6.2 работал отлично для меня (решил больше проблем, чем создал LOL). – Kaa

+0

ОК. это должно быть проблемой с тем, как я пытаюсь скомпилировать. – jasonmclose

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