이 코드를 컴파일 할 수없는 이유는 무엇입니까?
오류 2 오류 LNK2019 : 확인되지 않은 외부 기호 "INT의 __cdecl f를 (구조체 X)"extern (al) 문제
오류 3 오류 LNK2019 : 확인되지 않은 외부 기호 "구조체 X __cdecl 연산자
//main
#include "stdafx.h"
#include "X.h"
#include "Y.h"
//#include "def.h"
extern X operator*(X, Y);//HERE ARE DECLARED EXTERNAL *(X,Y) AND f(X)
extern int f(X);
/*GLOBALS*/
X x = 1;
Y y = x;
int i = 2;
int _tmain(int argc, _TCHAR* argv[])
{
i + 10;
y + 10;
y + 10 * y;
//x + (y + i);
x * x + i;
f(7);
//f(y);
//y + y;
//106 + y;
return 0;
}
//X
struct X
{
int i;
X(int value):i(value)
{
}
X operator+(int value)
{
return X(i + value);
}
operator int()
{
return i;
}
};
//Y
struct Y
{
int i;
Y(X x):i(x.i)
{ }
Y operator+(X x)
{
return Y(i + x.i);
}
};
//def.h
int f(X x);
X operator*(X x, Y y);
//def.cpp
#include "stdafx.h"
#include "def.h"
#include "X.h"
#include "Y.h"
int f(X x)
{
return x;
}
X operator*(X x, Y y)
{
return x * y;
}
나는 오류 메시지를 받고 있어요 * (구조체 X, 구조체 Y) "
또 다른 흥미로운 점은 구현을 def.h 파일에 배치하면 오류없이 컴파일된다는 것입니다. 그렇다면 def.cpp는 어떨까요? 왜 함수 f (X)가 이미 정의되었다는 오류 메시지가 표시되지 않습니까? ODR 규칙을 적용해서는 안됩니다. 두 번째 관심사는 def.cpp에서 f의 반환 유형을 int에서 double로 변경하면 intelliSense가 오류로 밑줄을 긋지 만 프로그램이 여전히 컴파일된다는 것입니다. 왜?
@Billy ONeal .cpp가 컴파일되지 않는 이유는 무엇입니까? –
@ Knowing : 프로젝트 속성에서 빌드 : 아니요로 설정할 수 있습니다. 프로젝트의 일부로 포함 할 수 없으며 프로젝트의 다른 .cpp 파일과 동일한 이름을 가질 수 있습니다.이 파일은 프로젝트의 컴파일 된 출력을 덮어 쓰게하고, 또는 Visual Studio가 혼란스러워지고 그렇지 않을 때 프로젝트 출력이 최신이라고 생각할 수 있습니다. 잘못 될 수있는 다른 것들이있을 수 있지만, 지금 당장 생각할 수있는 것들이 있습니다. extern이 링커 에러를 일으키는 함수 C 링키지를 제공한다는 것은 전적으로 가능합니다. 그러므로 그것을 제거하는 나의 제안. –
나는 그가 "연결되어 있지 않다"는 뜻으로, 컴파일되지 않았을 수도 있습니다. –