C++ 派生构造函数警告:将永远不会执行
早上好,先生们,妈妈们)C++ 派生构造函数警告:将永远不会执行,c++,compiler-warnings,C++,Compiler Warnings,早上好,先生们,妈妈们) 我刚刚遇到一些奇怪的问题,而在C++中,使用代码::块10.05,FreeBSD 9.1 < /P> lib.cpp中的源代码: class A{ public: A(); A(var1, var2); }; A::A(){ imlementation } A::A(va1, var2) {implementation } class B : public A{ public: B(); B(var1, var2); }; B::
我刚刚遇到一些奇怪的问题,而在C++中,使用代码::块10.05,FreeBSD 9.1 < /P> lib.cpp中的源代码:
class A{
public:
A();
A(var1, var2);
};
A::A(){ imlementation }
A::A(va1, var2) {implementation }
class B : public A{
public:
B();
B(var1, var2);
};
B::B() : A() {} // this is Astr#
B::B(var1, var2) : A(var1, var2) {} // this is Bstr#
lib.h中的源代码:
class A{
public:
A();
A(var1, var2);
};
class B : public A{
public:
B();
B(var1, var2);
};
main.cpp中的来源:
#include "lib.h"
...
int main(){
...
B* Bptr = new B();
B* Bptr2 = new B(var1, var2);
...
}
我得到了这些构建警告:
.../lib.cpp||In constructor 'B::B(var1, var2)':
.../lib.cpp|Bstr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B(var1, var2)':
.../lib.cpp|Bstr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B()':
.../lib.cpp|Astr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B()':
.../lib.cpp|Astr#|warning: will never be executed
||=== Build finished: 0 errors, 4 warnings ===|
此警告仅在调试模式下出现,发布版本似乎正常。
代码构建和运行良好,但我做错了什么
警告:将永远不会执行
是可以使用
-Wunreachable code
启用的GCC警告<代码>-Wunreachable代码非常不可靠,不应使用;由于这个原因,在较新版本的GCC中,整个选项被完全删除。(实际上,没有完全删除:命令行选项-Wunreachable code
仍然存在,但它不再起任何作用。)lib.h中的构造函数B(var1,var2)
是私有的。为什么在.h和.cpp?1中都有类A和类B的定义B::B(var1,var2):B{/code>这不应该编译。我想你想写B::B(var1,var2):B(){}
。2) B的构造函数是私有的,这就是为什么new B
不应该编译太多3)为var1
和var2
添加类型请尝试给出工作示例代码。@VladimirKolesnikov-这很容易出错,但它是有效的。这基本上就是#include“lib.h”
应该做的。我刚刚错过了lib.h代码中的“public”行,我将B导出为public a,为什么它们应该是private?@Dizzzydozzer:因为默认值是private。当您从A公开派生时,这对B的构造函数的可见性没有影响(因为A中不存在这些构造函数)。您应该从lib.cpp btw中删除B的声明,并保留定义。我看到你已经编辑了你的代码,同样的错误还会出现吗?