2016-09-18 9 views
-4

죄송합니다. 저는 C++과 프로그래밍에 익숙하지만 일반적으로 이러한 프로그램을 만들어 사용자 입력을 읽은 다음 명령과 파일을 읽습니다. 파일 a.h를 포함하고 싶지만 문제가 있습니다. 그것은 내 함수 메인이 재정의되었다는 것을 말해 주지만, 그것을 꺼내면 더 많은 에러가 발생합니다. 어쩌면 if else 문을 고려 중입니까? 나에게 갈 수있는 조언이 있니?내 파일을 C++에 포함시킬 수있는 방법이 있습니까?

파일 이름 tryout.cpp

#include <iostream> 
#include <string.h> 
#include "a.h" 

using namespace std; 

int main() 
{ 
string cmd,command,file1,file2; 
cout << "prompt<<"; 
cin >> cmd; 
int len = cmd.length(); 

int temp = cmd.find('<'); 
command = cmd. substr(0,temp); 
cout << "COMMAND: " << command << "\n"; 

cout << "File Redirection: " << cmd.at(temp) << "\n"; 

int temp1 = cmd.find('>'); 
file1 = cmd.substr(temp+1,temp1-temp-1); 
cout << "FILE: " << file1 << "\n"; 

cout << "File Redirection: " << cmd.at(temp1) <<"\n"; 

file2 = cmd.substr(temp1+1, len-1); 
cout << "File: " << file2 <<"\n"; 

return 0; 
} 

파일 이름 "a.h"

#include <iostream> 
#include <string.h> 

using namespace std; 

int main() 
{ 

string cmd,command1,command2,command3; 
cout << "prompt<<"; 
cin >> cmd; 
int len = cmd.length(); 

int temp = cmd.find('|'); 
command1 = cmd.substr(0,temp); 
cout << "COMMAND: " << command1 << "\n"; 

cout << "PIPE: " << cmd.at(temp) << "\n"; 

command2 = cmd.substr(temp+1,len-1); 
cout << "COMMAND: " << command2 << "\n"; 

cout << "PIPE: " << cmd.at(temp) << "\n"; 

command3 = cmd.substr(temp+2,len-2); 
cout << "COMMAND: " << command3 << "\n"; 



return 0; 
} 
+2

이 오류 메시지는 어떤 점에서 불분명합니다. 실제로 헤더 파일에'main()'의 정의가 있습니다. 실제로 달성하고자하는 것은 무엇입니까? –

+1

나는 이것이 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)의 매우 강한 향을 가지고 있음을 주저합니다. – WhozCraig

+0

왜이 작업을 수행 하시겠습니까? – Galik

답변

0

여러 주() 함수를 가질 수 없습니다. 컴파일 할 때 C++ 컴파일러는 헤더 파일의 내용을 가져와 #include 문이있는 곳에 추가합니다. 둘 이상의 main() 함수를 찾으면 실행 파일의 시작점을 설정할 위치를 알 수 없습니다. 헤더 파일 함수의 이름을 다른 것으로 변경해야합니다. 또한 함수 선언을 사용하고 다른 .cpp 또는 미리 컴파일 된 .lib 파일의 정의를 사용하는 대신 헤더 파일에 함수 정의를 포함하지 않는 것이 일반적입니다.

this 헤더가 작동하는 방법을 배우는 데 도움이되는 문서를 찾았습니다.

+0

이것은 다른 함수 정의에도 적용된다는 것이 주목할 만하다. –

+0

수정 해 주셔서 감사합니다. 그러나, 나는 main()이 우연히 두 번 선언 될 때 이것이 가장 자주 일어난다 고 생각한다. –

0

두 가지 주요 기능을 사용할 수 없습니다. 파일을 포함 시키려면 함수에 모든 것을 넣거나 클래스를 작성해야합니다.

1

".h"접미사는 "헤더"파일 용입니다. 귀하의 셀 회사에서받은 양식 편지를 생각하면 맨 위에는 회사 이름, 연락처 등을 알려주는 자료들이 많이 있습니다.

"헤더 파일"은 대부분 정의를 제공하는 파일입니다 , 여러 ".cpp"파일을 공유해야 할 수도 있습니다. ".cpp"파일은 일반적으로 컴파일러가 비슷하게 명명 된 "오브젝트 파일"로 바뀔 것으로 예상되는 개별 파일 인 "컴파일 유닛"입니다.

그래서 우리에게 보여 주신 부분에서 관심 분야가 잘못되었습니다. 실제로는 이 ".h"파일에 메인을 구현했습니다. 컴파일러가 ".CPP"파일을 읽을 때

, 그것은 iostreamstring.h 헤더에 읽고, 그것은 구현 main을 포함하는 a.h에서 읽습니다. 그런 다음 처리 tryout.cpp으로 돌아가서 구현 main을 보게됩니다.

해결책 : 메인을 a.h에서 제거하십시오.

관련 문제