Я обновляю некоторый старый код, который имеет несколько структур POD, которые обнуляют memset (не вините меня ... я не писал эту часть). Часть обновления изменила некоторые из них на классы, использующие частные внутренние указатели, которые теперь стираются с помощью memset.
Поэтому я добавил [не виртуальный] метод reset () к различным структурам и реорганизовал код, чтобы вызывать его вместо этого.
Одна конкретная структура разработала ошибку "неопределенная ссылка на` blah :: reset () '".
Изменение его из структуры в класс исправило ошибку.
При вызове nm для файла .o h имена искаженных функций для этого метода выглядят одинаково (будь то класс или структура).
Я использую g ++ 4.4.1 в Ubuntu.
Я ненавижу мысль, что это может быть ошибка компилятора / компоновщика, но я не уверен, что еще это может быть. Я пропускаю какое-то фундаментальное различие между структурами и классами? Я думал, что единственными значимыми были публичные / частные дефолты и то, как все о них думают.
Обновление:
На самом деле это зависит от того, как он объявлен:
typedef struct
{
...
void reset();
} foo;
не будет ссылки.
struct foo
{
...
void reset();
};
ссылки в порядке.
Так, может быть, просто отсутствие понимания с моей стороны о том, как typedefs работает в этом контексте?