2014-11-22 6 views
0

У меня есть n количество файлов cpp в проекте. «A» - это исходный файл, который будет иметь основную функцию, «B» - это еще один исходный файл, который содержит определение функции, которое будет использоваться 'A'.исходные файлы исходных файлов visual studio

a.cpp #include "stdafx.h" #include "b.h" int main() { add(5,4); return 0; }

Bh

#include "stdafx.h" void add(int a ,int b);

B.cpp

#include "stdafx.h" void add(int a,int b) { cout<<(a+b); }

но порядок сборки, как a.cpp после b.cpp так добавление функции должно быть неразрешено компоновщиком. Как я могу решить проблему с порядком сборки?

Edit 1: мой журнал файл сборки: -

Сложение начал 22-11-2014 15:57:11. 1> Проект «C: \ Users \ Admin \ Documents \ Visual Studio 2013 \ Projects \ ConsoleApplication2 \ ConsoleApplication2 \ ConsoleApplication2.vcxproj" на узле 2 (Build target (s)). 1> Ссылка: C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ link.exe/ERRORREPORT: PROMPT/OUT: "C: \ Users \ Admin \ Documents \ Visual Studio 2013 \ Projects \ ConsoleApplication2 \ Release \ ConsoleApplication2.exe "/ INCREMENTAL: NO/NOLOGO/LIBPATH: D: \ Glut/LIBPATH: D: \ OpenCV \ opencv \ build \ x86 \ vc11 \ lib opencv_core246.lib opencv_features2d246.lib opencv_haartraining_engine.lib opencv_calib3d246.lib opencv_highgui246.lib opencv_imgproc246.lib opencv_legacy246.lib opencv_ml246.lib opencv_objdetect246.lib opencv_video246.lib glut32.lib asmlibrary.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32. lib uuid.lib odbc32.lib odbccp32.lib/MANIFEST/MANIFESTUAC: "level = 'asInvoker' uiAccess = 'false'"/manifest: embed/DEBUG/PDB: "C: \ Users \ Admin \ Documents \ Visual Studio 2013 \ Проекты \ ConsoleApplication2 \ Release \ ConsoleApplication2.pdb "/ SUBSYSTEM: CONSOLE/OPT: REF/OPT: ICF/LTCG/TLBID: 1/D YNAMICBASE/NXCOMPAT/Implib: "C: \ Users \ Admin \ Documents \ Visual Studio 2013 \ Projects \ ConsoleApplication2 \ Release \ ConsoleApplication2.lib"/MACHINE: X86/SafeSEH Release \ CLM.obj Release \ FCheck.obj

 Release\FDet.obj 

    Release\IO.obj 

    Release\Patch.obj 

    Release\PAW.obj 

    Release\PDM.obj 

    Release\Tracker.obj 

    Release\updated_facetracker_v2.obj 

    Release\glm.obj 

    Release\glmimg.obj 

    Release\glmimg_devil.obj 

    Release\glmimg_jpg.obj 

    Release\glmimg_png.obj 

    Release\glmimg_sdl.obj 

    Release\glmimg_sim.obj 

    Release\glm_util.obj 

    Release\stdafx.obj 

1>updated_facetracker_v2.obj : error LNK2001: unresolved external symbol "void __cdecl glmDraw(struct _GLMmodel *,unsigned int)" ([email protected]@[email protected]@[email protected]) 
1>updated_facetracker_v2.obj : error LNK2001: unresolved external symbol "struct _GLMmodel * __cdecl glmReadOBJ(char *)" ([email protected]@[email protected]@[email protected]) 
1>C:\Users\Admin\Documents\Visual Studio 2013\Projects\ConsoleApplication2\Release\ConsoleApplication2.exe : fatal error LNK1120: 2 unresolved externals 
1>Done Building Project "C:\Users\Admin\Documents\Visual Studio 2013\Projects\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.vcxproj" (Build target(s)) -- FAILED. 

Сборка НЕИСПРАВНО.

Время, прошедшее с начала 00: 00: 00,81

это оригинальные проекты создания файла здесь glm.c компилируется построен после того, как файл updated_facetracker_v2.cpp и glm.c не было никакой ошибки «

+1

Вы должны взглянуть на окно ошибки, чтобы легко увидеть все ваши ошибки и определить первый из них. – sjdowling

+0

Эта ошибка не связана с примером, который вы указали, однако должна быть ошибка компиляции выше. – tillaert

+0

выше пример для легкого понимания –

ответ

1

. Ваш компоновщик fais, потому что B.cpp не компилируется. Компилятор не может создать объект для B.cpp. Так как объекта нет, компоновщик не может его найти и дает ошибку. Должна быть ошибка около B.cpp

Изменение B.cpp из:

#include "stdafx.h" 
void add(int a,int b) 
{ 
    cout<<(a+b); 
} 

к:

#include "stdafx.h" 
#include <iostreams> 

void add(int a,int b) 
{ 
    std::cout<<(a+b) << std::endl; 
} 

порядок сборки не имеет значения: компилятор принимает каждый исходный файл и создает объектный файл. Компонент принимает объектные файлы и пытается связать их с вашим целевым исполняемым файлом. Заказ вашего компилятора на создание объектных файлов не должен иметь значения.

Кроме того, ваш главный неисправна тоже:

изменение:

 add(5+4); 

к:

 add(5, 4); 

Вы пытаетесь связать с add(int) в то время как ваша функция в B.cpp имеет подпись add(int, int) которая является другой функцией в соответствии с компоновщиком.

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