4

プリプロセッサではなく、コンパイル時に独自の警告を作成したい (いくつかの回答を見てきました)。

class A
{
private:
    explicit A(A const& other);
};

ユーザーが行う場合:

A first;

その後:

A second(first);

彼は、コピーが構築されていないなどのエラーが発生します..私のコードには多くの継承が含まれていることに注意してください.コピーコンストラクターを使用するには...

だから..コンパイラのデフォルトの警告の代わりに、私は自分自身を作成し​​たいと思います....何か..「コピーコンストラクタは使用できません」

ヘルプ?ありがとう!

4

2 に答える 2

2

ユーザー定義メッセージでを使用するstatic_assertと、コンパイル中にこのエラーメッセージがトリガーされます

class A
{
private:
    A() {}

    explicit A(A const& /* other */) 
    { 
        static_assert(false, "You cannot use copy constructor"); 
    }
};

int main()
{
    A first;    
    A second(first); // compile error
}

LiveWorkSpaceでの出力

これは警告ではなくエラーを生成することに注意してください。ただし、ほとんどの場合、「エラーとしての警告」コンパイラオプションを使用し、無害であることがわかっている警告を明示的に(つまり、コメント付きで文書化して)無効にするのが最善です。

于 2013-01-28T08:41:03.077 に答える
1

プリプロセッサなしで、標準のC ++のみを使用すると、それは非現実的です。を使用できますstatic_assertが、警告ではありません。

于 2013-01-28T08:40:28.163 に答える