컴파일 실패 관련 질문

  • pizzamon
    pizzamon

    #안녕하세요

    QUADTREE

    문제 풀다가 컴파일 실패를 만났는데요.

    제가 쓰는 데톱에 깔려있는 MS VS 2008 에서는 컴파일 됐는데

    gcc 에서는 안되더라구요. 제가 gcc는 안써봐서 그러는데 어떻게 고쳐야 되는 지 도움 좀 주시면 감사하겠습니다. 에라나는 부분은 함수 인자에서 string 의 iterator를 참조형으로 받을 때 입니다.

    에러 내용은

    submission.cpp: In function ‘int main()’:
    submission.cpp:22:24: error: invalid initialization of non-const reference of type ‘std::basic_string::iterator& {aka __gnu_cxx::__normal_iterator >&}’ from an rvalue of type ‘std::basic_string::iterator {aka __gnu_cxx::__normal_iterator >}’
    submission.cpp:7:8: error: in passing argument 1 of ‘std::string Reverse(std::basic_string::iterator&)’

    이고 제 소스코드는

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    string Reverse(string::iterator& it);
    
    int main() {
    
        int c;
        cin >> c;
        cin.ignore();
    
        vector<string> output;
    
        for(int i=0; i<c; ++i) {
            string s;
            getline(cin,s);
    
            string r;
            r = Reverse(s.begin());
            output.push_back(r);
        }
    
        for(int i=0; i<c; ++i) {
            cout << output[i] << endl;
        }
    
    
    }
    
    string Reverse(string::iterator& it) {
    
        char head = *it;
        ++it;
    
        if(head == 'w' || head == 'b') {
            return string(1,head);
        }
        else {
    
            string q1 = Reverse(it);
            string q2 = Reverse(it);
            string q3 = Reverse(it);
            string q4 = Reverse(it);
    
            return string("x") + q3 + q4 + q1 + q2;     
        }
    }
    

    입니다


    10년 전
2개의 댓글이 있습니다.
  • Being
    Being

    s.begin()은 r-value인데 레퍼런스를 얻으시려던 부분이 잘못된 것 같네요.


    10년 전 link
  • pizzamon
    pizzamon

    감사합니다. 덕분에 고쳤네요.


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.