2012-09-05 4 views
-1

도움이 필요하십니까? 아래와 같은 오류를 해결하는 방법은 무엇입니까?오류가 필요합니다.

  • 30:24:error:expected ')' before ',' token

  • In member function 'int Address::compareTo(const Address&)':

  • 41:26:error:'std::string' has no member named 'compareTo'

#include<iostream> 
    using namespace std; 

    class Address { 
     int houseNumber; 
     string street; 
     int apartmentNumber; 
     string city; 
     string state; 
     string zipCode; // e.g., "47405-1234" 
     Address(int houseNumber, 
       string street, 
       // no apartmentNumber 
       string city, 
       string state, 
       string zipCode) { 
     this->houseNumber = houseNumber; 
     this->street = street; 
     this->city = city; 
     this->state = state; 
     this->zipCode = zipCode; 
     } 
     Address(int houseNumber, 
       string street, 
       int apartmentNumber, 
       string city, 
       string state, 
       string zipCode) { 
     this(houseNumber, street, city, state, zipCode); 
     this->apartmentNumber = apartmentNumber; 
     } 
     void print(void) { 
      std::cout << "Street: " << street << "\nCity: " 
       << city << "\nState: " << state << "\nPostal Code: " << zipCode; 
    } 

     int compareTo(const Address &a) { 
     // same conventions as for Strings 
     return this->zipCode.compareTo(a); 
     } 
    }; 
+1

"41 : 26 : 오류 : 'std :: string'에 'compareTo'라는 멤버가 없습니다?" [std :: string reference] (http://en.cppreference.com/w/cpp/string/basic_string)를 참조하십시오. – juanchopanza

+0

가능한 복제본 [C++ 몇 가지 오류가 있습니다] (http://stackoverflow.com/questions/12276247/c-a-few-errors-here) –

답변

2

당신이 찾고있는 기능은 없습니다 compareTo (자바, C#을 사람), compare입니까?

또한 angle이 (가) 해당 범위에서 선언되지 않았습니다. 당신은 뜻 했습니까 :

return this->zipCode.compare("angel");  

또는 방금 변수를 생략 했습니까? 또한

당신을 ("해야"적용) :

    필요가 없습니다
  • this->
  • compare에 대한 대안은 당신이 ==를 사용할 수
  • printcompareTo (이 어떤지 true 반환) const
  • 으로 생성자의 멤버 초기화 목록을 사용하십시오.
  • 헤더에서 using namespace std; 제거
  • 는 ...
  • 사용 헤더 string 파라미터 const &하여 생성자
  • 적절한 압입
  • 패스 가드 포함 소스 파일에서 구현 분리
1

30:24:error:expected ')' before ',' token

귀하는

this(houseNumber, street, city, state, zipCode); 

이것은 말도 안됩니다. this은 함수가 아니라 생성되는 개체에 대한 포인터입니다.

아마 다른 구성자를 호출하여 데이터 멤버 중 일부를 초기화하려고합니다. C++ 11에서는 컴파일러가 아직 그것을 지원하는지 여부는 모르지만 다른 생성자로 위임 할 수 있습니다. 이 작업은 initialiser 목록에서 수행해야하지 생성자 본문 : 문제가 해결되지 않으면

Address(/*args*/) : Address(/*other args*/), apartmentNumber(apartmentNumber) {} 

는, 당신은 모두 생성자에서 초기화를 해주고 복제하거나, 또는 멤버 함수와 호출로 이동합니다 그 두 생성자로부터. 또한 생성자를 떠나는 대신 집계 초기화를 사용하는 것이 좋습니다

:

Address address = { 
    123, "Fake Street", /* and so on */ 
}; 

만 간단하게 설정할 수없는 클래스 불변으로 데이터를 저장할 클래스에 대해이 작업을 수행해야하지만. 오류가 말한대로

41:26:error:'std::string' has no member named 'compareTo'

std::string에는 compareTo 회원이 없습니다.그러나 compare이라는 회원이 있습니다. 귀하의 의견이 Java의 String.compareTo과 동일한 동작을 원한다는 것을 암시한다고 가정하면, 그것은 당신이 원하는 것입니다.

그러나 C++에서는 비교 연산자 (==, < 등)를 재정 의하여 객체를 비교 가능하게 만드는 것이 훨씬 더 일반적입니다. 그렇게하면 표준 알고리즘 및 유사한 관용구를 사용하는 다른 코드와 함께 사용하는 것이 더 편리해질 것입니다. 다른 언어의 관용구를 사용하는 것보다 이런 종류의 일을하는 것이 좋습니다.

관련 문제