一、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/n/200174.html
微信扫一扫
支付宝扫一扫