2013-10-20 167 views
0

我在main.cpp中遇到重做字符(以粗體顯示)的錯誤,當我明顯地在上面聲明它時。我也想知道爲什麼它要求我在使用名稱空間前加一個分號,因爲我從來沒有這樣做過。重做字符未聲明尚未聲明

//ReverseString.h 
#include <iostream> 
#include <string> 

using namespace std; 

class StringClass 
{ 
public: 
string string; 
int GetStringLength (char*); 
void Reverse(char*); 
void OutputString(char*); 
void UserInputString (char*); 
StringClass(); 
private: 
    int Length; 
} 

//StringClass.cpp 
#include <iostream> 
#include <string> 
#include "ReverseString.h" 

;using namespace std; 

void StringClass::UserInputString(char *string) 
{ 
cout << "Input a string you would like to be reversed.\n"; 
cin >> string; 
cout << "The string you entered: " << string << endl; 
} 
int StringClass::GetStringLength (char *string) 
{ 
Length = strlen(string); 
return Length; 
} 
void StringClass::Reverse(char *string) 
{ 
int c; 
char *front, *rear, temp; 

front = string; 
rear = string; 

GetStringLength(string); 

for (c = 0 ; c < (Length - 1) ; c++) 
    rear++; 

for (c = 0 ; c < Length/2 ; c++) 
{   
    temp = *rear; 
    *rear = *front; 
    *front = temp; 

    front++; 
    rear--; 
} 
} 
void StringClass::OutputString(char *string) 
{ 
cout << "Your string reversed is: " << string << "."; 
} 

//Main.cpp 
#include <iostream> 
#include <string> 
#include <fstream> 
#include "ReverseString.h" 

;using namespace std; 

const int MaxSize = 100; 

int main() 
{ 
do 
{ 
    char string[MaxSize]; 
    **char redo;** 

    StringClass str; 

    str.UserInputString(string); 

    str.Reverse(string); 

    str.OutputString(string); 

    //Asks user if they want redo the program 
    cout << "Would you like to redo the program?\n"; 
    cout << "Please enter Y or N: \n"; 
    **cin >> redo;** 
}while(redo == 'Y' || redo == 'y'); 
} 

它真的令人困惑,爲什麼它聲明它,但給一個錯誤,它沒有聲明。

+0

您正在尋求使用該輸入函數的緩衝區溢出。分號不會在using指令之前出現。它遵循之前的代碼(請記住#includes是複製粘貼的)。 – chris

+0

如何限制輸入中的緩衝區溢出? @chris – PhotographyBum

+0

只需輸入一個'std :: string'而不是'char *'。 – chris

回答

1

redo被聲明爲循環內的局部變量。它的範圍從聲明開始,並在關鍵字while之前的結束大括號處結束。在while條件下未知名稱redo

0

您在ReverseString.h的類聲明後缺少分號。

編譯器正在拾取行using namespace std;上的錯誤,因爲這是第一次檢測到問題時。這並不意味着你應該把分號放在那裏。

有些編譯器會提示您可能缺少類聲明中的分號,而其他編譯器則不會。這個錯誤很常見。如果你在一個荒謬的地方看到缺失的分號錯誤,你應該立即考慮你可能不小心將一個標題留在了標題之外。

+0

謝謝! @paddy我永遠不會猜到。 – PhotographyBum

+0

哦,對不起,我由於某種原因錯過了其他位。這已經有了答案。 – paddy