2017-12-14 69 views
0

저는 몇 가지 기본 C++ 작업을 연습하고 싶습니다. 나는 그걸 실험하기 위해 상속에 집중했다. 내가 이상한 문제에 봉착 할 때까지는 모든 것이 잘 진행되었다. '범위'는이 범위에서 선언되지 않았다. 일부 주제를 살펴 보았지만 대부분의 힌트는 라이브러리를 추가하거나 'namespace std'를 사용하는 것과 같았지만 문제는 해결되지 않았습니다. 글로벌 네임 스페이스의 생성자 'cout'이이 범위에서 선언되지 않았습니다.

#include <iostream> 

class podst 
{ 
public: 
    float a; 
    float b; 
    float dodaw(); 
    podst(float c,float d) : a(c), b(d) 
    { 

    } 
}; 
float podst::dodaw() 
{ 
    return (a+b); 
} 

class poch : public podst 
{ 
    poch() : podst(5,4) 
    { 
     cout << a << endl << b << dodaw() << endl; 
    } 

}; 


using namespace std; 
int main() 
{ 
    podst podst(1,2); 
    cout << podst.dodaw() << endl; 
    poch poch2; 

    return 0; 


} 
+0

그것은'대신'네임 스페이스를 사용하여 표준의 표준 : cout'을 활용하는 것이 훨씬 낫다을, '전혀. https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

답변

1

poch 전화 cout을하지 std 네임 스페이스. using namespace std; 지시어가 실제로는 위의 지시어가 아니라 아래에 있음에 유의하십시오. 당신이 전체 네임 스페이스 접두사를 작성하지 않으려면 더 나은 것마다, 함수 단위에보다는 파일 단위를 그 지시를 배치 :

poch() : podst(5,4) 
{ 
    using namespace std; 
    cout << a << endl << b << dodaw() << endl; 
} 

이 방법은 큰 코드베이스를 유지하는 데 도움이 될 것입니다 조각으로.

+0

제안 된 솔루션으로 생성자 본문에서'using namespace std; '를 선택한 이유가 궁금합니다. . –

+0

@ FrançoisAndrieux 필자는 그 지시어를 함수 단위로 활용하도록 제안했습니다. – VTT

1

사용하는 네임 스페이스 std는 처음으로 cout을 사용하면됩니다. poch 클래스에서 std :: cout 및 std :: endl을 사용해보십시오.

+0

+1. 그리고'std :: endl' 대신에'\ n''을 사용하십시오. 이 코드는'std :: endl'이하는 여분의 것들을 필요로하지 않습니다. –

0

사용 선언은 작성한 시점부터 효력을 발생합니다. cout에 대한 전화는 이보다 위의 번호이므로 using에 해당하지 않으므로 std::cout을 사용해야합니다.

You should avoid using namespace std. 더 나은 대안은 필요한 것만 가져 오는 것입니다 (예 : using std::cout;. 그러나 더 나은 선택은 자격있는 이름을 사용하는 것입니다. 입력하는 것이 조금 더 많지만 모호성을 방지합니다. 정규화 된 이름은 모든 코드 기반에서 매우 유비 쿼터 스합니다. 적어도 - cout과 같은 정규화되지 않은 이름은 항상 약간 놀랍고 코드를 읽을 때 약간 위로 올라갑니다.

0

물론 poch는 부모 클래스를 상속받은 클래스이기 때문에 은 파일의 시작 부분에 표준 네임 스페이스를 선언하여 모든 클래스와 함수에 전역 적으로 적용해야하지만 poch 클래스가 main이되기 전에 선언해야합니다. 그것을 사용할 수 없다. 오히려 명시 적으로 std :: cout과 std :: endl을 사용할 수 있고 프로그램이 컴파일하는데 문제가 없을 것이다. 당신이 표준 라이브러리의 네임 스페이스 발신자 :: 표준을 생략 할 경우

+0

다른 답변을 삭제 해주세요. 추가 할 콘텐츠가 더 많은 경우 "수정"버튼을 사용하여 하나의 질문에 대한 여러 답변을 작성하지 않고 기존 답변을 편집하고 개선하십시오. –

0
class poch : public podst 
{ 
    poch() : podst(5,4) 
    { 
     //you should have used std::cout 
     std::cout << a << endl << b << dodaw() << std::endl; 
    } 

}; 
+1

이 답변을 삭제하거나 다른 답변으로 이동하십시오. –

0

, 당신은 일반적으로 잘 #INCLUDE 문 다음과 INT 주() "

이전에 작성된 (이전

using namespace std; 

를 작성해야

cout << ... 

컴파일러가 코드를 순차적으로 읽으면서 'using'을 사용하는 것은 나쁜 습관으로 간주된다는 점에 유의하십시오. std :: namespace 호출자를 다음과 같이 사용하는 것이 좋습니다 :

std::cout << "Hello World!" << std::endl; 

은 특정 문제 해결하려면 :

#include <iostream> 

using namespace std; 

class podst { ...