2012-05-08 75 views
2

任何人都可以请向我解释这段代码有什么问题,以及如何解决它? 这是一个更大的项目的一部分,如果你需要更多的信息,以便给出一个肛门请让我知道。无法编译C++构造函数

,即时通讯得到的错误是这样的:

g++ -c search.cpp 
    search.cpp: In constructor ‘Search::Search()’: 
    search.cpp:26:26: error: ‘callnumber’ was not declared in this scope 
    make: *** [search.o] Error 1 



Search::Search() 
     { 
      ifstream input; 
      input.open("data.txt", ios::in); 

      if(!input.good()) 
       //return 1; 
      string callnumber; 
      string title; 
      string subject; 
      string author; 
      string description; 
      string publisher; 
      string city; 
      string year; 
      string series; 
      string notes; 

      while(! getline(input, callnumber, '|').eof()) 
      { 
       getline(input, title, '|'); 
       getline(input, subject, '|'); 
       getline(input, author, '|'); 
       getline(input, description, '|'); 
       getline(input, publisher, '|'); 
       getline(input, city, '|'); 
       getline(input, year, '|'); 
       getline(input, series, '|'); 
       getline(input, notes, '|'); 


      Book *book = new Book(callnumber, title, subject, author, description, publisher, city, year, series, notes); 
      Add(book); 
      } 

       input.close(); 

     } 
+2

不知道为什么这是downvoted。如果你盯着代码太久,很难看到这样的错误。 –

回答

12

在此行中:

if(!input.good()) 
    //return 1; 
string callnumber; 

您注释掉用分号线路和你不使用大括号,和C++不对于空格和换行符来说,空格是敏感的,所以通过删除注释(并添加缩进)我们可以看到它相当于

if (!input.good()) 
    string callnumber; 

我们可以看到callnumber的声明在if的本地。加括号或分号,以使callnumber声明是if外(或只是完全删除):

if (!input.good()) { // or ; 
    //return 1; 
} 
string callnumber; 

除宏

+1

@ user1325414 **总是**使用大括号。它不到一秒钟。 –

+0

谢谢,解决了它 – user1325414

+0

我无法计算我已经做了多少次。 – chris

2

因为您评论过这条线

if(!input.good()) 
    //return 1; 

字符串callnumber只在该范围内声明,并且不可用它。

删除if语句太中,或者取消回线

+0

非常感谢。 – user1325414

1
 if(!input.good()) 
      //return 1; 
     string callnumber; 

是有效

 if(!input.good()) { 
      //return 1; 
      string callnumber; 
     } 

因为被注释掉的//return 1;不是一个声明。因此callnumber被创建,然后立即消失超出范围。

+0

谢谢!得到它了! – user1325414