2012-04-10 3 views
-1

내 자신의 문자열 클래스를 만들고 이름을 'String.hpp'로 지정한 다음이 파일을 'String.cpp'에 포함 시켰습니다. 그러나 g ++/gcc는 내가 시도한 것과 상관없이 'String.hpp'를 찾을 수 없다고 말합니다. 또한 'String'클래스도 찾을 수 없습니다.g ++/gcc는 String.hpp라는 헤더 파일을 찾을 수 없습니다.

C++의 문자열이 소문자 '문자열'이라고 생각했습니다. 'String'은 C++에서 예약 된 클래스 또는 단어입니까?

편집 :

가 나는 것 같았다 코드 본문을 다시 실행하여이 문제를 해결 한합니다. 이름은 모두 동일하게 유지되었습니다. 다음에 이런 일이 발생하면 내 자신의 코드를 살펴보고 문제를 찾으려고합니다.

+3

실제 코드의 중요한 부분을 보여줍니다. 우리는이 수준의 정보를 도울 수 없습니다. – trojanfoe

+0

어떤 OS입니까? Windows는 파일의 대문자 사용에 신경을 쓰지 않습니다. '문자열'은 예약어가 아니며 문제가되어서는 안됩니다. – sje397

+0

* 실제 * 파일 내용을 더 표시하십시오. 당신이 그것을 쓰면서, 아무런 문제가 없습니다. 그러나 악마가 세부 사항에 있습니다 ... –

답변

3

C++에서 문자열은 키워드가 아닌 표준 정의 형식입니다. 컴파일러는 다음 일이 어떤 클래스에 대해 알고가는 ins't 당신의 캐릭터 헤더를 찾을 수없는 경우 그리고

#include <string> 

//elsewhere 

std::string str("hi"); 

처럼 사용된다.

이와 같이 고유 헤더를 포함해야합니다. 따옴표가 아니라 꺾쇠 괄호에 유의하십시오. 앵글 괄호는 컴파일러가 현재 디렉토리가 아닌 include 디렉토리를 검색해야 함을 의미합니다.

#include "String.hpp" 
//else where 
yournamepsace::String str //etc... 

이 표준 버전과 충돌하지 않습니다, 당신은 그러나 당신은 매우 비슷한 이름을 다루는 의심의 여지가있을 것 같은이 네임 스페이스되어 있는지 확인해야한다.

컴파일러는 여전히 파일이 소스 파일에있는 같은 디렉토리에 있는지 확인해야 다음을 참조 할 수 없습니다.이 프로그래밍 연습의 일종 인 경우

마지막으로 다음에 수행

하지만, 이것이 프로덕션 코드라면 std :: string을 사용해보십시오. 세계는 다른 문자열을 필요로하지 않습니다. :)

+0

안녕하세요. 111111, 네임 스페이스가 있습니다. – chlong

+0

@chlong 아직 작동하지 않습니까? 귀하의 포함 라인은 무엇이며 귀하의 디렉토리 구조는 귀하에게 더 나은 답변을 제공하기 위해이 정보가 필요합니다. – 111111

+0

안녕하세요. 111111, 전체 코드를 다시 리디렉션하고 더 이상 #include에 대해 불평하지 않습니다. 이름은 여전히 ​​동일합니다. 디렉토리 구조에 관해서는, 2 개의 파일 "String.cpp"와 "String.hpp"는 동일한 전화 번호부에서있다. – chlong

2

내 의심이 컴파일러가 파일을 검색합니다 어디에서 현재 디렉토리를 제외하는

#include <String.hpp> 

을하고있다. 이 경우 컴파일러는 현재 디렉토리를 검색합니다.

#include "String.hpp" 

이 경우 컴파일러는 현재 디렉토리도 검색합니다.

+0

안녕하세요, John도 생각했습니다. 두 파일은 같은 디렉토리에 있고 실제로 #include "String.hpp"를 사용합니다. – chlong

관련 문제