управляемый код С++ не находит реализацию функции

У меня есть 3 файла:

  1. основной файл ".h" - содержит реализацию простой WinForm (управляемый c++)
  2. fold/file.h
  3. свернуть/файл.cpp

(file.h и file.cpp не представляют класс)

У меня есть функция func(), объявление которой находится в fold/file.h, а реализация — в fold/file.cpp.

В main.h есть включение "fold/file.h".

Когда я вызываю func() из main.h, я получаю ошибки: "Неразрешенный токен" и "Неразрешенная внешняя ошибка". когда я помещаю реализацию "func()" в fold/file.h, ошибки нет.

В чем проблема?

Благодарность!


person DudiD    schedule 14.08.2011    source источник
comment
Похоже на ошибку компоновщика, а не на ошибку компилятора. Вы связываете все свои объектные файлы? Кроме того, разве Managed C++ не заснул с рыбами в 2003 году?   -  person Kerrek SB    schedule 14.08.2011
comment
Не могли бы вы разместить свой код здесь? Я думаю, это объяснит лучше   -  person Tae-Sung Shin    schedule 14.08.2011
comment
@Kerrek: меня смутил ваш комментарий по управляемому C ++, поэтому я посмотрел его. Похоже, управляемый C++ устарел, а C++/CLI — нет. en.wikipedia.org/wiki/C%2B%2B/CLI   -  person Merlyn Morgan-Graham    schedule 14.08.2011
comment
@Merlyn: это два совершенно разных языка. Ну, одно - язык, другое - мерзость. ОП рекомендуется дважды проверять теги.   -  person Kerrek SB    schedule 14.08.2011


Ответы (1)


когда я помещаю реализацию "func()" в fold/file.h, ошибки нет.

Вы компилируете все исходники? Я подозреваю, что нет, потому что, когда вы переносите определения в заголовочный файл и включаете его в основной исходный файл, препроцессор фактически копирует его в основной исходный файл. Таким образом, при компиляции и компоновке основной единицы трансляции компилятор и компоновщик могут видеть как объявления, так и определения соответственно.

person Mahesh    schedule 14.08.2011
comment
Я создаю проект и запускаю его в Visual Studio 2010, поэтому я не думаю, что проблема в компиляции. - person DudiD; 14.08.2011
comment
@DudiD - ошибка, которую вы получаете, является ошибкой компоновщика. Не ошибка компилятора. Компоновщику не удалось найти определение для func(). - person Mahesh; 14.08.2011
comment
Как я могу решить проблему со связью? (в визуальной студии 2010) - person DudiD; 14.08.2011