2014-12-16 3 views
0

현재 C++의 수업에 대해 배우고있는 임. 임 자바 언어 배경에서 오는.문자열 출력에 도움이 필요합니다.

나는 동물이라고 불리는 클래스가 있습니다. animals 생성자에는 문자열이 필요한 매개 변수가 있습니다. 내가 그 클래스의 객체를 생성하고 생성자에 전달 된 문자열을 인쇄하려고 할 때, 그것은

동물의 CLASS .. 새로운 줄에서 떨어져

#include "animal.h" 
#include <string> 
#include <iostream> 
using namespace std; 


animal::animal(string nameofanimal) 
{ 

    string name = nameofanimal; 
} 

void animal::getName(){ 
    cout << name << endl; 
} 

동물 아무것도 출력하지 않습니다 HEADER :

#pragma once 
#ifndef ANIMAL_H 
#define ANIMAL_H 
#include <string> 
#include <iostream> 
using namespace std; 


class animal 
{ 

private: 
    string name; 

public: 
    animal(string x); 
    void getName(); 


}; 

#endif ANIMAL_H 

메인 클래스

#include "animal.h" 
#include <string> 
#include <iostream> 
using namespace std; 



int main() 
{ 
    animal firstAnimal("Bob"); 
    firstAnimal.getName(); 

} 

출력은 아무것도 아니다. 이것은 매우 기본적인 코드이며 정직하게 말하면 나는 그런 간단한 작업을 수행하는 방법을 모른다. 내가 알아 차린 것은 동물 생성자에서 varible이라는 이름을 강조 할 때마다 getName() 함수의 가변적 인 이름이 강조 표시되지 않으므로 이것을 추측하는 것은 포인터와 관련이 있다는 것입니다. .

animal::animal(string nameofanimal) 
{  
    string name = nameofanimal; // <<< This sets only the local variable 
} 
+2

생성자의 코드를 살펴보십시오. 그것에 관해서는 아무것도 안 보이니? –

+0

Sam이 말하는 것처럼. 범위 ... – xDaevax

+1

'getName()'의 이름을'printNameToStdOut'로 변경하십시오. 이는 시도하려는 것이기 때문입니다. – juanchopanza

답변

2
는 클래스 멤버 변수를 그림자 지역 변수 name이 당신의 animal 생성자 정의를 변경

값이 로컬 변수에 값을 저장하고 있습니다.

string name = nameofanimal; 

이 값은 클래스의 실제 데이터 멤버에 저장되지 않지만이 값은 로컬 변수에 저장됩니다. 데이터 멤버에 저장하려면 다음을 사용하십시오.

name = nameofanimal; 
+0

오 마이 일! 나는 내가 그것을 보지 않았다라고 생각하지 않는다!! 도와 주셔서 감사합니다. – user3323950

+0

앞으로 이러한 오류가 발생하지 않도록하려면 변수 이름 지정의 스타일 규칙을 사용하는 것이 가장 좋습니다. 예를 들어 끝에있는 각 클래스 멤버 변수 (name_)에 밑줄을 추가하고, 앞에 "m_"(m_name) 또는 대문자 (Name)를 붙입니다. 따라서 로컬 변수와 멤버 변수를 섞는 것이 훨씬 더 어려워집니다. –

+0

@AntonPoznyakovskiy 클래스 멤버 변수에 대한 스타일 규칙을 사용하는 것이 좋은 생각 외에도 OP 샘플에 표시된 것처럼 이러한 오류를 방지하는 데 실제로 도움이되는 방법을 알지 못합니다. 일반적으로 선언 코드는 생성자 본문에 복사하여 붙여 넣기 때문에 이러한 종류의 오류가 발생합니다. 실제로이를 방지하는 유일한 방법은 내 샘플에 표시된대로 멤버 초기화 목록을 사용하는 것입니다. –

2

문제는 Y입니다 : 원래 definiton에서

animal::animal(string nameofanimal) : name(nameofanimal) { 
} 

을 다음과 같이

관련 문제