문제

나는 다음과 같이 컴파일하려고합니다.:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{false, false, false};
}

컴파일러는 나에게 다음과 같은 오류를 제공합니다: SomeClass::SomeStruct::SomeStruct: no overloaded function takes 3 arguments.

이 코드를 변경하면:

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{{false, false, false}};
}

이 프로그램은 컴파일하고 잘 실행됩니다.이 문제는 컴파일러에 문제가 있습니까,아니면 구문을 이해하지 못합니까?내가 읽은 것에서 첫 번째 버전이 컴파일되어야합니다.

도움이 되었습니까?

해결책

여기 3797 에서 책임 있는 문법이 있습니다.:

// after a member declaration:
braced-or-equal-initializer-list:
  = initializer-clause
  braced-init-list

braced-init-list:
  { initializer-list ,OPT }
  { }

initializer-list:
  initializer-clause
  initializer-list, initializer-clause

initializer-clause:
  assignment-expression
  braced-init-list

그래서 나는 첫 번째 진술이 정확하다고 말하고 실제로 받아 들여진다 최근 gcc 그리고 clang.

다른 팁

세미콜론을 필요한 대로 배치하려면

class SomeClass
{
    struct SomeStruct { bool a,b,c; };
    SomeStruct ss{false, false, false};
};

이 버그는 2013 컴파일러의 버그 인 것 같습니다.적어도 코드는 www.ideone.com.

구조체 일부 구조는 집계 이며 이니셜라이저 목록을 사용하여 초기화 해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top