2008-08-29 5 views
2

내가 C 코드로 컴파일과 비주얼 C++ (/ TC) 에서 간단한이 .c를 컴파일 그리고 난이 컴파일러 오류를컴파일러 오류 C2143 구조체

오류 C2143 얻을 사용하는 경우 : 구문 오류 : 누락 ';' 같은

struct foo test; 

이 구조체의 형식 정의를 사용하여 간다 간단한 구조체를 요구 라인에 '유형'

전에.

오류 C2275 : 'FOO'식

답변

6

C에서 코드 앞에 모든 변수를 선언해야한다는 것을 잊었습니다.

+0

같은 문제가있는 것 같습니다. – user58670

1

으로 이러한 유형의 불법 사용은 실수로 이전 줄에 세미콜론을 생략 했습니까? 이전 행이 #include이면 누락 된 세미콜론을 다른 곳에서 찾아야 할 수도 있습니다.

편집 : 나머지 코드가 C++ 인 경우 문제가 무엇인지 판단하기에 충분한 정보가 없을 수 있습니다. 아마도 코드를 pastebin에 게시하면 모든 것을 볼 수 있습니다.

이상적으로 게시하기 위해 크기를 작게 만드는 과정에서 갑자기 작업이 시작되고 문제가 발견됩니다.

0

구조 유형은 어떻게 정의됩니까? (당신은 'S1'버전을 사용했기 때문에) 이미 구조체에 대한 형식 정의를했습니다 때문에

// This will define a typedef for S1, in both C and in C++ 
typedef struct { 
    int data; 
    int text; 
} S1; 

// This will define a typedef for S2 ONLY in C++, will create error in C. 
struct S2 { 
    int data; 
    int text; 
}; 
1

, 당신은 작성해야 :

foo test; 

보다는 두 가지 방법이 있습니다 C 모두에서 작동합니다

struct foo test; 

C++

0

C2143은 기본적으로 컴파일러는 토큰 t을 가지고 있다고 모자는 현재 상황에서 불법이라고 생각합니다. 이 오류의 함축 중 하나는 컴파일러 오류를 트리거하는 행 앞에 실제 문제점이있을 수 있다는 것입니다. Greg가 말했듯이이 문제를 진단하기 위해 더 많은 코드를 볼 필요가 있다고 생각합니다.

왜 이것이 C++ 코드가 유효하다는 사실을 C 언어로 컴파일되지 않는지 알아 내려고 할 때 유용하다고 생각하는지 잘 모르겠습니까? C++은 (대부분) C의 수퍼 세트이기 때문에 유효한 C++ 코드가 구문 적으로 올바른 C 코드가 아닌 이유는 여러 가지가 있습니다. C++은 구조체를 클래스로 취급합니다!