> 백엔드 개발 > C++ > C++ 컴파일 오류: 로컬 유형 정의가 유효하지 않습니다. 어떻게 해야 합니까?

C++ 컴파일 오류: 로컬 유형 정의가 유효하지 않습니다. 어떻게 해야 합니까?

WBOY
풀어 주다: 2023-08-21 22:19:48
원래의
1343명이 탐색했습니다.

C++ 프로그래밍 중에 컴파일 오류가 자주 발생하며 이러한 오류는 매우 혼란스러울 수 있습니다. 이 기사에서는 주로 C++ 컴파일 오류에 대해 설명합니다. "로컬 유형 정의가 유효하지 않습니다. 어떻게 해야 합니까?"

C++ 프로그램에서는 구조와 같은 클래스 내에서 유형을 정의해야 하는 경우가 많습니다. 이는 "typedef" 키워드를 사용하여 달성할 수 있습니다. 예:

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};
로그인 후 복사
로그인 후 복사

위 프로그램에서는 "typedef"를 사용하여 "Point" 구조를 정의하고 이를 "MyClass" 클래스에서 사용합니다.

그러나 경우에 따라 "typedef"를 사용하면 "잘못된 로컬 유형 정의"라는 컴파일 오류가 발생합니다. 이 오류는 일반적으로 유형을 정의할 때 잘못된 구문을 사용하여 발생합니다. "typedef"를 사용하여 구조를 정의하는 경우 "struct" 키워드를 사용하여 클래스 정의와 구별해야 합니다. 다음은 올바른 작성 방법입니다.

class MyClass {
public:
    typedef struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};
로그인 후 복사

위 프로그램에서 "struct" 키워드는 컴파일러에게 구조를 정의하고 싶다고 알리고, "typedef" 키워드는 이 구조에 이름을 지정하겠다고 컴파일러에 알립니다. "가리키다" . 이런 방식으로 클래스에서 "Point" 유형을 사용할 수 있습니다. 또한 컴파일 오류를 방지하려면 클래스 정의 앞에 이 구조의 정의를 배치해야 합니다.

이 외에도 "잘못된 로컬 유형 정의" 오류가 발생하는 다른 원인이 있습니다. 다음은 몇 가지 일반적인 실수입니다.

  1. 클래스 내에서 이름 없는 구조체나 공용체를 사용합니다.
class MyClass {
public:
    struct {
        int x;
        int y;
    } Point; // 编译错误:本地类型定义无效
    Point getPoint();
};
로그인 후 복사

위 프로그램에서 "Point" 구조는 이름이 없으며 클래스 정의에 사용할 수 없습니다. 다음과 같이 이름을 지정해야 합니다.

class MyClass {
public:
    struct Point {
        int x;
        int y;
    } Point;
    Point getPoint();
};
로그인 후 복사
  1. 같은 이름을 가진 구조체 또는 공용체가 클래스 내에 정의되어 있습니다.
class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point Point; // 编译错误:本地类型定义无效
    Point getPoint();
};
로그인 후 복사

위 프로그램에서는 구조와 변수 모두에 동일한 이름을 정의했기 때문에 컴파일 오류가 발생했습니다. 별도로 이름을 지정해야 합니다.

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point point;
    Point getPoint();
};
로그인 후 복사
  1. 클래스 내에서 구조체나 공용체를 사용할 때 "struct" 또는 "union" 키워드는 사용되지 않습니다.
class MyClass {
public:
    typedef Point {
        int x;
        int y;
    } Point;
    Point getPoint(); // 编译错误:本地类型定义无效
};
로그인 후 복사

위 프로그램에서는 "Point" 구조를 정의하기 위해 "struct" 또는 "union" 키워드를 사용하지 않았으므로 컴파일 오류가 발생했습니다. "typedef" 키워드 자체로는 컴파일러가 이것이 구조체이고 올바른 구문을 사용해야 한다는 사실을 알 수 없습니다.

class MyClass {
public:
    typedef struct {
        int x;
        int y;
    } Point;
    Point getPoint();
};
로그인 후 복사
로그인 후 복사

요약하면, C++ 컴파일 오류 "잘못된 로컬 유형 정의"는 일반적으로 잘못된 구문을 사용하기 때문에 발생합니다. 또는 클래스에서 명명되지 않은 구조 또는 공용체의 내부 정의로 인해 발생합니다. "typedef" 및 "struct" 키워드를 올바르게 사용하면 이러한 오류를 피할 수 있습니다.

위 내용은 C++ 컴파일 오류: 로컬 유형 정의가 유효하지 않습니다. 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿