가능한 중복 :
Scoped using-directive within a struct/class declaration?
Why “using namespace X;” is not allowed inside class/struct level?왜 C++ 구조체에서 네임 스페이스 지시문을 사용할 수 없습니까?
나는 구조로 단지 표준 : : 문자열을 소개하고 싶습니다. 아래의 내용이 불법으로 간주되는 이유는 무엇입니까? C++는 다른 의미를 가진 동일한 키워드를 사용
#include <iostream>
#include <string>
struct Father
{
using std::string;
string sons[20];
string daughters[20];
};
그러나 이상하게도, 나는
int main()
{
using std::string;
}
기능에 따라 업데이트를 할 수 있습니다.
C++는 "using"키워드를 사용하여 기본 클래스의 데이터 멤버 또는 함수를 현재 클래스에 도입합니다. 따라서 구조체 선언 안에 std :: string을 사용하여 썼을 때 컴파일러는 기본 클래스 std에서 멤버를 소개하려고한다고 가정합니다. 하지만 std는 기본 클래스가 아니라 네임 스페이스입니다. 따라서
struct A
{
int i;
}
struct B:A
{
using A::i; // legal
using std::string// illegal, because ::std is not a class
}
동일한 "사용"키워드
는 특정 공간의 부재에 접근하기 위해 사용된다.그래서 저는 컴파일러가 선언 된 위치에 따라 "using"의 의미를 결정한다고 추측합니다.
질문을 편집 할 때 ** 자동으로 삽입 된 "중복 될 수 있음"링크를 ** 제거하지 마십시오 **. 제안 된 질문과 중복되지 않는다고 생각하는 이유를 설명하기 위해 업데이트 한 것으로 이해합니다. 이는 완벽하게 수용 가능한/권장되는 행동입니다. 그러나 편집 한 내용을 질문에 부쳐 목록에있는 사용자가 다시 투표에 참여 시키거나 "깃발"링크를 사용하여 운영자가 업데이트 당 검토하고 다시 열도록 요청해야합니다. 자동 삽입 된 링크를 제거하는 것은 매우 바람직하지 않습니다. 다시 열면 시스템에서이를 제거합니다. –
(이 경우 실수로 삭제 한 경우, 즉 수정 사항이 제 시간에 충돌 한 경우 가혹한 음색에 사과드립니다. 미래에 대한 조언으로 받아들이세요. :-)) –