2014-03-25 2 views
0

헤더 파일이 내 주요 테스트 프로그램으로 컴파일되지 않습니다. 왜 이것이 그럴까요? 나는 줄을 서서 보았지만 이것이 왜 그런지에 대한 간단한 이유를 발견하지 못했습니다. #ifndef#define 두 개를 시도했지만 파일이 내 테스트 프로그램에 포함되지 않는 이유는 확실하지 않습니다.#include 파일이 컴파일되지 않는 이유는 무엇입니까?

다음은 테스트 프로그램을 컴파일하고 컴파일 할 때 나타나는 오류 메시지입니다. 이것은 헤더 파일과 관련이 있지만이 간단한 문제를 해결하는 방법을 잘 모르겠습니다. 이상하게도 C++을 사용했고 헤더 파일에이 문제가 있다는 것을 기억하지 못했습니다.

오류 :

Error 1 error C2015: too many characters in constant c:\users\itpr13266\desktop\c++\testproject\testproject\testproject.cpp 10 1 TestProject

Error 2 error C2006: '#include' : expected a filename, found 'constant' c:\users\itpr13266\desktop\c++\testproject\testproject\testproject.cpp 10 1 TestProject

Error 3 error C1083: Cannot open include file: '': No such file or directory c:\users\itpr13266\desktop\c++\testproject\testproject\testproject.cpp 10 1 TestProject

코드

#include "stdafx.h" 
#include "iostream" 
#include <iostream> 
#include <fstream> 
#include <math.h> 
#include <iostream> 

#ifndef MYDATESTRUCTURES_H 
#define MYDATESTRUCTURES_H 
    #include'myDataStructures.h' <-- name of my include file 
#endif 

using namespace std; 

#define MY_NAME "Alex" 

void f(int); 
void DoSome(int, char); 

enum color { red, green, blue }; 
enum color2 { r, g=5, b }; 

class CVector { 
    public: 
    int x,y; 
    CVector() {} 
    CVector (int a, int b) : x(a), y(b) {} 

    void printVector() 
    { 
     std::cout << "X--> " << x << std::endl; 
     std::cout << "Y--> " << y << std::endl; 
    } 
}; 

CVector operator+ (const CVector& lhs, const CVector& rhs) { 
    CVector temp; 
    temp.x = lhs.x + rhs.x; 
    temp.y = lhs.y + rhs.y; 
    return temp; 
} 

template<typename T> 
void f(T s) 
{ 
    std::cout << s << '\n'; 
} 

template<typename P, typename N> 
void DoSome(P a, N b) 
{ 
    std::cout << "P--> " << a << '\n'; 
    std::cout << "N--> " << b << '\n'; 
} 

void testMath() 
{ 
    int result = ceil(2.3) - cos(.2) + sin(8.0) + abs(3.44); 
    cos(4.1); 
} 

void testStorageTypes() 
{ 
    int a; 
    register int b; 
    extern int c; 
    static int y; 
} 

color temp = blue; 
color2 temp2 = r; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::getchar(); 
    return 0; 
} 

코드 (헤더 파일)

#include <iostream> 

int myAdd1(int, int); 
int myAdd2(int, int, int, int, int); 

struct myFirst1 
{ 
} 

struct myFirst2 
{ 
} 

int myAdd1(int x, int y) 
{ 
    return x + y; 
} 

int myAdd2(int x, int y, int z, int m, int y) 
{ 
    return x + y; 
} 
+4

작은 따옴표와'# include' 다음에 공백이 없습니까? – mydogisbox

+1

'#include "myDataStructures.h"'사용 (따옴표 사용) – IronMensan

+3

당신은 [include guards] (http://en.wikipedia.org/wiki/Include_guard)를 올바르게 사용하지 않습니다. –

답변

8

이 줄은 유효하지 않습니다

#include'myDataStructures.h' <-- name of my include file 

C/C++에서 작은 따옴표는 문자 리터럴을 나타내는 데 사용되며 문자열 리터럴은 인용되지 않습니다. 당신은 큰 따옴표를 사용해야합니다 :

#include "myDataStructures.h" 

오류 메시지가 약간 매우 휴대용 때문에 희소 그들의 사용을하는 multi-character constant, but its value is implementation-defined이 실제로 가능하기 때문에 그들이 할 수있는 것보다 덜 도움이됩니다.

0

파일을 포함 할 때는 큰 따옴표 "MyIncludeFile.h"을 사용해야합니다.

+0

또는 꺾쇠 괄호. – JBentley

0

사용 #include "myDataStructures.h" 대신 #include 'myDataStructures.h'

후자는 구문 오류가 발생합니다. 큰 따옴표를 사용

#include "myDataStructures.h" 

컴파일러의 -I를 통해 주어진 추가 디렉토리에서 찾습니다 :

2

당신은 #include 문을 큰 따옴표 ("include_filename") 또는 꺾쇠 괄호 (<include_filename>)에 첨부 파일 이름을 제공하거나 필요 (예 : GCC) 또는 이와 동등한 옵션 (발행 파일 디렉토리 포함)을 사용하여 꺾쇠 괄호 검색 순서로 되돌아 가기 전에 (현재 툴 체인의 본질적인 디렉토리를 찾습니다).

당신 (고정) 샘플에 대한 또 다른 중요 점 : 당신이 그것을 포함되는 곳이 처리기 조건문이 안에 당신의 myDataStructures.h 파일을 배치하지해야

#ifndef MYDATESTRUCTURES_H 
#define MYDATESTRUCTURES_H 
    #include "myDataStructures.h" 
#endif 

:

myDataStructures.

#ifndef MYDATESTRUCTURES_H 
#define MYDATESTRUCTURES_H 

#include <iostream> 

int myAdd1(int, int); 
int myAdd2(int, int, int, int, int); 

// ... 

#endif 

시간 경비원myDataStructures.h 파일이 다른 헤더 파일에서 여러 번 포함 된 경우 피 '여러 선언/정의'컴파일러 오류하기위한 것입니다 포함되어 있습니다. 전처리기에 한 번 표시되는 경우 코드를 다시 렌더링하지 못하게합니다.

관련 문제