私は最近、小さなプロジェクトで作業するときに奇妙なエラーセットを作成しました。列挙型メンバーがクラス名と矛盾します
#include <memory>
enum derivedtype {B, C};
//abstract class
class A{};
class B : public A
{};
class C : public A
{};
int main()
{
{
std::unique_ptr<A> myb(new B);
std::unique_ptr<A> myc(new C);
}
}
このコンパイラエラーを生成します:これは、基本的にそれを引き起こしたコードだった
enumclasserror.cpp: In function ‘int main()’:
enumclasserror.cpp:15:30: error: ‘B’ does not name a type
std::unique_ptr<A> myb(new B);
^
enumclasserror.cpp:16:30: error: ‘C’ does not name a type
std::unique_ptr<A> myc(new C);
修正は、新規の後、クラスのキーワードを追加しました:今
std::unique_ptr<A> myb(new class B);
列挙型を元のコードのabstactクラスのヘッダファイルにインクルードされていましたが(それはスポットするのがさらに難しくなりました)、それは気にしませんでした。列挙型のメンバーがインスタンスの作成を失敗させる可能性があるとは想像もできませんでした。そのバグを発見するのに、文字通り時間がかかりました。誰も私になぜそれが起こるか説明することができますか?新しいことはenumsで意味をなしますか?
P.S:エラーは、クラスのキーワードを提案打ち鳴らすを使用しています同僚によって発見されました。あなたが見ることができるように私のUbuntuの標準C++コンパイラは、私はあなたがここに期待他に何かわからない
「バグ」と「インスタンス生成の失敗」と言うと、実行時の問題のように聞こえるだけです。あなたが経験した唯一の問題は、バグではなくコンパイラエラーです。 –
@TrevorHickey:コンパイラエラーはバグです。 –
Wikipediaは、バグに関して「間違った、予期しない結果を引き起こす、または意図しない動作をするコンピュータプログラムやシステムのエラー、欠陥、不具合、または障害」と定義しています。 – pingul