ホームページ > バックエンド開発 > C++ > C++ 構文エラー: クラスの外で定義されたコンストラクターは、クラス名を修飾子として追加する必要があります。どのように修正すればよいですか?

C++ 構文エラー: クラスの外で定義されたコンストラクターは、クラス名を修飾子として追加する必要があります。どのように修正すればよいですか?

WBOY
リリース: 2023-08-22 14:00:51
オリジナル
1031 人が閲覧しました

C++ 構文エラー: クラスの外で定義されたコンストラクターは、クラス名を修飾子として追加する必要があります。どのように修正すればよいですか?

C は広く使用されているオブジェクト指向プログラミング言語です。C でクラスのコンストラクターを定義するときに、コンストラクターの定義をクラスの外に配置する場合は、次のようにする必要があります。クラス名を修飾子として関数定義に追加して、このコンストラクターがどのクラスに属するかを指定します。これは C 構文の基本的なルールです。クラスのコンストラクターを定義するときにこの規則に従わない場合、コンパイル エラーが表示され、「クラス外で定義されたコンストラクターはクラス名で修飾する必要があります。」というメッセージが表示されます。

では、この種のコンパイル エラーが発生した場合、どのように修正すればよいでしょうか?シンプルで効果的な方法は、クラスのコンストラクターを定義するときにクラス名を修飾子として追加して、関数が属するクラスをコンパイラーが正しく処理できるようにすることです。

次に、この記事では、クラスの外でコンストラクターを定義し、構文エラーを回避する方法について詳しく説明します。

  1. クラス定義でコンストラクターを宣言

まず、クラス定義でコンストラクターを宣言します。コンストラクターを宣言する場合、関数本体を記述する必要はなく、関数名とパラメーターのみを記述する必要があります。例:

class Person {
public:
    Person(int age); // 声明构造函数
private:
    int m_age;
};
ログイン後にコピー

このコードは、パラメータが整数型 age であるコンストラクターを含む Person クラスを宣言します。

  1. クラスの外でコンストラクターを定義する

#次に、クラスの外でコンストラクターを定義します。コンストラクターを定義するときは、この関数がどのクラスに属するかを指定する修飾子としてクラス名を追加する必要があることに注意してください。例:

Person::Person(int age) { // 类名作为限定符
    m_age = age;
}
ログイン後にコピー

このコードは、Person クラスのコンストラクターを定義します。コンストラクターを定義するときは、クラス名を修飾子として追加する必要があることに注意してください。修飾子を省略すると、コンパイラは「クラス外で定義されたコンストラクタはクラス名で修飾する必要があります。」というエラー メッセージを表示します。

  1. クラス外で複数のコンストラクターを定義する
#クラス外で複数のコンストラクターを定義する必要がある場合は、各関数名の前に関数のオーバーロードを使用できます。 異なる仮パラメーター リストを追加します。異なるコンストラクターを区別するため。例:

Person::Person() { // 默认构造函数
    m_age = 0;
}

Person::Person(int age) { // 带参构造函数
    m_age = age;
}
ログイン後にコピー

このコードは 2 つのコンストラクターを定義します。1 つはデフォルトのコンストラクターで、もう 1 つはパラメーター化されたコンストラクターです。関数名の前に異なる仮パラメータ リストを追加することにより、コンパイラは 2 つのコンストラクタの定義を正しく区別できます。

なお、クラス内で宣言されたコンストラクタの定義はデフォルトの定義となり、ユーザがクラス外で宣言または定義しない場合は、コンパイラが自動的にデフォルトのコンストラクタの定義を生成します。パラメーターのないコンストラクター Function の場合、そのコンストラクター本体は空です。パラメーターのあるコンストラクターの場合、パラメーターは初期化されます。クラス内で宣言し、クラス外でコンストラクターを定義する必要がある場合は、クラス内で宣言されたデフォルトの定義をクリアする必要があります。たとえば、クラス内で次のように宣言します。

class Person {
public:
  Person()=default; // 显示声明默认构造函数
  Person(int age);
private:
  int m_age;
}
ログイン後にコピー

デフォルトのコンストラクターを外部で定義します。クラス:

Person::Person() { // 默认构造函数
    m_age = 0;
}
ログイン後にコピー
    概要
C では、クラスの外で定義されたコンストラクターはクラス名で修飾する必要があります。クラス名の修飾子を省略すると、コンパイラによって構文エラーが表示されます。このエラーを回避するには、最初にクラス定義でコンストラクターを宣言し、次にクラスの外でコンストラクターを定義し、関数名の前に修飾子としてクラス名を追加します。複数のコンストラクターを定義する必要がある場合は、関数のオーバーロードを使用できます。これらの基礎知識をマスターすると、C 言語を使用してプログラムを作成できるようになります。

以上がC++ 構文エラー: クラスの外で定義されたコンストラクターは、クラス名を修飾子として追加する必要があります。どのように修正すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート