Неопределенная ссылка на не являющуюся членом функцию - C++

У меня есть следующее в заголовочном файле.

namespace silc{
   class pattern_token_map
   {
      /* Contents */
   };

   pattern_token_map* load_from_file(const char*);
}

В файле CPP (это имеет надлежащий, включает),

pattern_token_map* load_from_file(const char* filename)
{
   // Implementation goes here
}

В другом файле CPP. Это имеет, все надлежащие включают.

void some_method()
{
    const char* filename = "sample.xml";
    pattern_token_map* map = load_from_file( filename ); // Linker complains about this.
}

Я получаю ошибку компоновщика, говоря что неопределенная ссылка на load_from_file. Я не могу видеть то, что идет не так, как надо здесь.

Любая справка ценилась бы.

Компилятор: G ++ ОС: Ubuntu 9.10

Править

Вот используемая команда компоновщика.

g++ -L/home/nkn/silc-project/third_party/UnitTest++ -o tests.out  src/phonetic_kit/pattern_token_map.o  tests/pattern_token_map_tests.o  tests/main.o -lUnitTest++

Ошибка от pattern_token_map_tests.o и функция доступна в pattern_token_map.o. Таким образом, я предполагаю, что порядок соединения не делает проблему. (Я удалил некоторые файлы из команды для упрощения его),

6
задан Navaneeth K N 17 January 2010 в 17:44
поделиться

2 ответа

Когда вы реализуете его, нужно убедиться, что вы реализуете правильную функцию:

namespace silc {
pattern_token_map* load_from_file(const char* filename) {
   // Implementation goes here
}
}

Если бы вы вместо этого сделали это:

using namespace silc; // to get pattern_token_map
pattern_token_map* load_from_file(const char* filename) {
   // Implementation goes here
}

Тогда бы вы определяли новую функцию, а не silc::load_from_file.

Избегайте использования директив ("использование пространства имен ...;") за пределами области действия функции, в качестве общего руководства:

using namespace silc; // outside function scope: avoid

silc::pattern_token_map*                      // qualify return type
random_function(silc::pattern_token_map* p) { // and parameters
  using namespace silc; // inside function scope: fine
  pattern_token_map* p2 = 0; // don't have to qualify inside the function
                             // if you want to use the using directive
  silc::pattern_token_map* p3 = 0; // but you can always do this
  return 0;
}
9
ответ дан 10 December 2019 в 02:47
поделиться

Я начинающий креветка, так что это может быть не лучшим решением, но оно должно работать.

Можно получить высоту таблицы, если учитывать размер шрифта и вертикальную набивку, а также количество записей в @ data и получить текущую позицию курсора, вызвав метод Prawn:: Document.cursor .

Имея эти два номера, вы должны иметь возможность проверить, вписывается ли таблица на этой странице или нет. Если нет, просто запустите новую (путем вызова метода Prawn:: Document.start _ new _ page ).

В противном случае таблица будет разорвана автоматически и продолжится на следующей странице.

-121--4746514-

Я бы рекомендовал использовать инструмент статического анализа, такой как

FindBugs

, который часто может обнаруживать взаимоблокировки во время компиляции

-121--3339003-

Выполняется ли связывание в файле объекта, созданном при компиляции первого файла cpp? Подобные ошибки компоновщика возникают, когда один объект ссылается на символ, который не включен в связанные объекты.

Изменить: Я все еще достаточно уверен, что это проблема. В первом файле имеется ли переопределение символа препроцессора load_from_file?

0
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: