2017-02-06 5 views
2

그래서 초심자 문제를 해결하고 코드를 수정하고 싶었습니다.C++ : ''mainCRTStartup ' "오류 등의 다중 정의

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int random; 
int guess; 
int num_guess = 1; 

int main(){ 
    srand(time(NULL)); 
    random = rand() % 100 + 1; 

    std::cout << "Try to guess my number between 1 and 100." << std::endl; 
    std::cin >> guess; 

    while(guess > random){ 
     std::cout << "Sorry too high but i'll give you another try." <<  std::endl; 
     std::cin >> guess; 
     num_guess += 1; 
    } 

    while(guess < random){ 
     std::cout << "Sorry too low but i'll give you another try." << std::endl; 
     std::cin >> guess; 
     num_guess += 1; 
    } 

    if(guess = random){ 
     std::cout << "WOW! Congratulations you actually got it, you did use " << num_guess << " tries tho." << std::endl; 
    } 


    return(0); 
} 

1에서 100 사이의 임의의 숫자를 생성 한 다음 그 숫자가 무엇인지 추측합니다. 그런데 같은 프로젝트에서이 코드를 다른 프로젝트의 다른 파일로 복사했기 때문에 학교에서이 작업을 수행했기 때문에 다큐멘터리 용도로 모든 다른 버전의 코드를 원했습니다. 하지만 프로그램이 당신은 내가 MAIN.CPP에서 기존 코드를 삭제 그것을

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int number; 
int guess = 100; 
int num_guess = 1; 

int main(){ 
    std::cout << "Please enter any number between 1 and 100" << std::endl; 
    std::cin >> number; 
    if(number > 100 && number < 1){ 
     std::cout << "Enter a valid number" << std::endl; 
     std::cin >> number; 
    } 

    srand(time(NULL)); 
    guess = rand() % guess + 1; 


    return(0); 
} 
1 ~ 100 줄 번호를 추측하도록되어 새로운 코드를 작성하기 시작 대신 쓴, 그러나 나는 시도 할 때 때 `atexit '
  • 여러 정의 mainCRTStartup'WinMainCRTStartup`의
  • 여러 정의`의

    • 여러 정의 : 그것을 실행하는 내가 이러한 오류 메시지를 가지고 `_onexit '`_Jv_RegisterClasses에
    • 정의되지 않은 참조'`__gcc_deregister_frame의
    • 여러 정의 '`__gcc_register_frame의
    • 여러 정의'의 ltiple 정의 |
  • +1

    몇 가지'main' 함수를 정의했습니다. 링커가 진입 점을 찾아내는 방법은 무엇입니까? – ilotXXI

    +1

    파일이 동일한 프로젝트에 속하면 컴파일러는이 두 파일을 동일한 실행 파일에 포함하려고 시도합니다. 그리고 두 가지'main()'함수가있을 것이고, 분명히 두 가지 모두에서 끌리게 될 것입니다. 따라서 새로운 프로젝트를 만드십시오. –

    +0

    여러 main() 함수를 사용하지 않아도됩니다. C 런타임 라이브러리를 두 번 이상 링크하고 있습니다. 그 일이 어떻게 일어 났는지 짐작할 수있는 질문에 빵 부스러기가 없습니다. 이전 프로젝트를 재사용하는 대신 새로운 프로젝트를 만드는 것이 앞으로 나아갈 수있는 가장 확실한 대안이 될 것입니다. –

    답변

    0

    이전 파일을 프로젝트에서 제외하지 않은 것으로 추측합니다. 이 경우 링커는 두 개의 main 함수를 충족하며 사용할 항목을 알지 못합니다. 가능한 해결 방법 :

    1. 프로젝트에서 사용하지 않은 파일을 제외합니다.
    2. 주석 아웃 오래된 버전;
    3. 사용 조건부 컴파일 :

      #ifdef OLD_VER 
      // main1 
      ... 
      #else 
      // main2 
      ... 
      #endif 
      
    4. 은 새 프로젝트를 만들;
    5. 버전 제어 시스템을 사용하십시오.

    처음 3 가지 방법은 오래 사용하지 않는 것이 좋습니다. 마지막 하나는 좋은 지적입니다 (가장 좋은 점은 제 생각이지만) 초등 VCS 학습을 요구할 수 있습니다.