2009-09-16 7 views
-1

유명한 schaums 개요 C++ 프로그래밍 책에서 공부하고 있었는데 목록 초기화라고하는 것을 보았습니다. 전에는 몰랐습니다.Schaum의 코드가 작동하지 않습니다!

나는이 책에 따라 코드를 만들었지 만 많은 컴파일러 오류가 발생했습니다. 문제가있는 곳에서 자아를 묻기 시작 했으므로 책의 코드를 복사하고 어떤 코드가 작동 하는지를 추측합니다! 여기에 무엇이 잘못되었는지

class Rational { 
     public: 
       Rational(int n=0, int d=1) : num(n), den(d) { } 
       int numerator0 const { return num; } 
       int denominator0 const { return den; } 

     private: 
       int num, den; 

}; 

main() 
{ 
     Rational x(22, 7); 
     cout << x.numerator() << "/" << x.denominator() << endl; 

} 

당신이 말해 줄 수 :

여기에 코드입니까? 미리 감사드립니다. 오후 8시 30 분 P.S. 나는이 책을 모르는

+0

"작동하지 않는다"에 대해 더 구체적으로 설명 할 수 있습니까? 무슨 일이야? – cjm

+1

코드가 엉망입니다 - 메소드 선언에 (와) 대신 0이 있습니다. –

+3

왜 코드를 파일에 붙여 넣고 컴파일하면 오류가 발생했는지 확인할 수 있습니까? 첫 번째 질문이나 두 질문을 질문에 붙여 넣는 것이 어떻습니까? – sbi

답변

0

... "전문가"그래 맞아 지음,하지만 적어도 :

main() 

이 될해야합니다 또한

int main() 

,

// now the same as `Rational` methods. 
cout << x.numerator0() << "/" << x.denominator0() << endl; 
9
  int numerator0 const { return num; } 
      int denominator0 const { return den; } 

괄호() 대신 '0'(영) cahracter에 주목하십시오.

  int numerator() const { return num; } 
      int denominator() const { return den; } 
+10

OCR이 실패한 것처럼 보입니다. –

+3

옙, 진짜 책을 사는 이유가 하나 더 있습니다.> – arul

+0

누군가가 편집자를 해고하거나 저자에게 실제 워드 프로세서를 제공합니다. –

3

은 오타 책 또는 붙여 넣기 코드에있는 경우

int numerator() const { return num; } 

은 몰라해야 여기

int numerator0 const { return num; } 

오타처럼 보인다.

아, 그리고 당신이 누락 "초기화 목록"없습니다 "목록 초기화"

+0

그것은 책입니다 - 어도비는 모든 것을 잘 표시하지 않습니다 ... – gujo

6
  1. 라고는
  2. 분자와 분모 서명

이 작품 유효하지 않은 IOSTREAMS 및 사용 지침을 포함 확인 :

#include <iostream> 
using std::cout; 
using std::endl; 
class Rational { 
    public: 
      Rational(int n=0, int d=1) : num(n), den(d) { } 
      int numerator() const { return num; } 
      int denominator() const { return den; } 

    private: 
      int num, den; 

}; 

main() 
{ 
    Rational x(22, 7); 
    cout << x.numerator() << "/" << x.denominator() << endl; 

} 
+3

'int main()'을 의미하지 않습니까? – rlbond

2

다음은 더 나은 버전입니다. 최대 ()0와 엉망, 이것은 당신이 무엇을 의미하는지, 심지어 가장 기본적인 지식없이 코드를 입력 의미

#include <iostream> 
using std::cout; 
using std::endl; 
// I'm assuming your code has the #include's and using's and you just 
// omitted them. 

class Rational { 
    public: 
     Rational(int n=0, int d=1) : num(n), den(d) { } 
     // "num(n), den(d)" is an initialization list; I think that's what 
     // Schaum's is talking about here. 

     int numerator() const { return num; } 
     int denominator() const { return den; } 
     // numerator and denominator are methods, so they need parenthesis 
     // like any other function call. 0 on the end must have been a typo. 

    private: 
     int num, den; 
     // This is okay, but many style guides recommend naming your member 
     // variables differently to set them apart from other variables. 
     // For example: 
     // int mNum, mDen; 
     // int num_, den_; 
}; 

// main needs a return type. For the sake of completness, I usually include 
// the argc and argv parameters as well. C++ lets you omit a parameter's 
// name if that parameter isn't used; this silences "unused parameter" 
// warnings in your compiler. 
int main(int, char**) 
{ 
    Rational x(22, 7); 
    cout << x.numerator() << "/" << x.denominator() << endl; 
    return 0; // You really ought to have a return value. 
} 
+0

main()에는 명시적인 return 문이 필요하지 않습니다. 그것을 버리면 0이 반환됩니다. – Lucas

+0

나는 그것을 깨닫지 못했다. 내 C 일간의 버릇이 틀림 없어. 감사. –

+0

int를 반환하지 않으면 일부 컴파일러에서 불평 할 것입니다. 이식성을 위해 반품을 포함시키는 것이 좋습니다. – patros

4

. (코드가이 책에 포함 된 경우에도 마찬가지입니다.) 즉, 이미 그렇게 진행되었다는 것을 너무도 이해하지 못했음을 의미합니다.

이 책은 아무런 언급없이 실제로 coutendl (std::coutstd::endl 대신)을 사용합니까? 그리고이 두 식별자에 대해 필요한 include 지시문을 제공하지 못합니까? 반환 유형 (int main())이없는 main() 함수를 실제로 정의합니까?

이 질문에 대한 대답이 "예"이면 멀리 던져주십시오. 예, 저는 매우 심각합니다. 그것이 정말로 유명하다해도 (나는 C++에 관심이있어 의심의 여지가 없습니다.) 이것이 틀린 경우에, 그 때 고명 한 고명 한 쓰레기이다.

this answer에서 저는 아주 좋은 C++ 서적을 몇 개 나열했습니다.

+0

이 책의 첫 번째 예에서는 이러한 것을 설명하고 모든 예제의 일부로 가정합니다. 내가 볼 수 있듯이 모든 예제는 main()을 main()으로 선언합니다. 그들이 걸을 수 있기 전에 달려 가려고하는 사람의 경우와 같습니다. – patros

+0

@patros : 알겠습니다. 따라서 오류는 책에있는 것이 아니라 책 앞에 있습니다. ':)' – sbi

관련 문제