2014-12-13 2 views
2

Visual Studio Express 2013을 사용하고 C++에 익숙하지 않습니다. (Java에 대한 좋은 이해를 가지고 있지만이 문제는 저를 곤두박질칩니다.)문자열 변수가 클래스의 다른 인스턴스에서 공유 됨

"Dialogue"클래스의 "text"변수가 다른 인스턴스와 동일한 값을 공유하는 것 같습니다. 이 의미는 대화와 인쇄 모두의 결과입니다. " 콘솔에.

//Main Class 
int main() 
{ 
    Dialogue dialogue1("Okay..."); 
    Dialogue dialogue2("Then give it back!"); 

    dialogue1.Print(); 
    dialogue2.Print(); 
} 

참고 :이 클래스를 사용하면 전역 변수와 같은 텍스트를 정의

//The "Dialogue Class" 
#include "Dialogue.h" 
#include <iostream> 
#include <string> 

using namespace std; 

string text; 

Dialogue::Dialogue(string dialogue) 
{ 
    text = dialogue; 
} 

Dialogue::~Dialogue() 
{ 

} 

void Dialogue::Print() 
{ 
    cout << text << endl; 
} 
+3

코드가 전역 변수를 두 번 쓰고 있습니다 ... –

+1

'main'은 클래스가 아니며 함수입니다. 자바와 달리 함수와 데이터는 C++ (네임 스페이스와 전역 네임 스페이스의 예제)에있는 클래스 외부에 존재할 수 있습니다. – JorenHeit

답변

2

자바 배경에서 오는 당신은 당신이 일을 정의 할 수 있습니다 C++에서 자바와 달리 것을 고려해야 클래스 외부에 존재한다. 따라서 Java와 같이 클래스에서 정적 변수를 가질 수는 없지만 완전히 전역이거나 네임 스페이스와 관련된 변수 만 가질 수도 있습니다. 내가 아는 한 당신은 자바에서 그렇게 할 수 없다.
코드에서 발생하는 상황. std::string text은 Dialogue 클래스의 멤버가 아닌 Dialogue의 멤버로 정의되었으므로 기본적으로 전역 변수이므로 Dialog 인스턴스가 아닌 한 번만 존재합니다. Dialogue (dialogue.h)의 클래스 정의로 이동하면 예상대로 작동합니다.

+0

답장을 보내 주셔서 감사합니다. 매우 도움이되었습니다. 방금 고쳤어. –

0

별도입니다.

string text; 

따라서 동일한 변수가 몇 번이고 반복됩니다.

하는 클래스 정의에서 멤버 변수로 정의 (나는 dialogue.h에서 가정) :

class Dialogue { 
... 
    string text; 
... 
}; 
관련 문제