一、unimplemented interface
在介面類中如果某個函數沒有在實現類中實現,就會出現unimplemented interface錯誤。這種情況下,編譯器不知道該如何實現該函數。下面是一個代碼示例:
class MyInterface {
public:
virtual void doSomething() = 0; // 純虛函數
};
class MyClass : public MyInterface {
// doSomething未被實現,會提示unimplemented interface錯誤
};
解決方案是在實現類中實現這個函數:
class MyClass : public MyInterface {
public:
void doSomething() {
// 實現函數體
}
};
二、unimplemented or unreasonable
這種錯誤出現在某些函數參數或返回值未被設置,以及某些分支永遠不會被執行的情況下。下面是一個示例:
int add(int a, int b) {
if (a > 0) {
return a + b;
} else {
// 這個分支永遠不會被執行
}
}
解決方案是確保所有的分支都被覆蓋,並給所有的函數參數和返回值賦值。
三、unimplemented non-trivial
這種錯誤出現在編譯器不能生成默認實現(trivial default implementation)的情況下。例如,如果一個類擁有一個析構函數,則編譯器無法生成默認的構造函數。下面是一個示例:
class MyClass {
public:
~MyClass();
};
MyClass::~MyClass() {
// 實現函數體
}
MyClass obj; // unimplemented non-trivial錯誤
解決方案是定義一個默認的構造函數:
class MyClass {
public:
MyClass() {}
~MyClass();
};
MyClass::~MyClass() {
// 實現函數體
}
MyClass obj; // 正常
四、unimplemented nontrivial
與unimplemented non-trivial類似,但它與模板有關。這種錯誤通常出現在模板類中。下面是一個示例:
template
class MyClass {
public:
~MyClass();
};
template
MyClass::~MyClass() {
// 實現函數體
}
MyClass obj; // unimplemented nontrivial錯誤
解決方案是定義一個默認的構造函數和拷貝構造函數:
template
class MyClass {
public:
MyClass() {}
~MyClass();
MyClass(const MyClass& other) {}
};
template
MyClass::~MyClass() {
// 實現函數體
}
MyClass obj; // 正常
五、unimplemented pure virtual
這種錯誤出現在派生類沒有實現基類的純虛函數的情況下。下面是一個示例:
class MyInterface {
public:
virtual void doSomething() = 0; // 純虛函數
};
class MyClass : public MyInterface {
};
MyClass obj; // unimplemented pure virtual錯誤
解決方案是在派生類中實現基類的純虛函數:
class MyClass : public MyInterface {
public:
void doSomething() {
// 實現函數體
}
};
MyClass obj; // 正常
六、unimplemented for
這種錯誤出現在枚舉類型中沒有覆蓋所有的選項的情況下。下面是一個示例:
enum MyEnum {
Option1,
Option2,
Option3,
};
void doSomething(MyEnum option) {
switch (option) {
case Option1:
break;
case Option2:
break;
}
}
解決方案是覆蓋所有的選項,或者添加一個默認的分支:
void doSomething(MyEnum option) {
switch (option) {
case Option1:
break;
case Option2:
break;
case Option3:
break;
default:
// 處理未覆蓋的選項
break;
}
}
七、unimplemented feature
這種錯誤出現在編譯器不支持某種特性的情況下。下面是一個示例:
// C++11特性,編譯器不支持,會提示unimplemented feature錯誤
auto add(int a, int b) -> int {
return a + b;
}
解決方案是不使用不支持的特性,或者升級編譯器。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200174.html
微信掃一掃
支付寶掃一掃