草庐IT

C++ 未解析的外部符号

我有一个类设置,我从那个类开始使用继承。在文件a.h中classa{public:virtualvoidprint();};在文件b.h中:#include"a.h"#includeclassb:publica{public:voidprint();};在b.cpp中#include"a.h"#include"b.h"voidb::print(){};在主文件中我包含了这两个文件:#include"a.h"#include"b.h"但是我得到了一个未解析的虚函数打印符号。文件a.obj被列为生成错误的文件我做错了什么?如果我将b.cpp移动到类定义下方的b.h中,它就可以正常工作。

c++ - C++ 中的编译时多态性与运行时多态性的优点/缺点

在C++中,当可以使用运行时(子类、虚函数)或编译时(模板、函数重载)多态性实现相同的功能时,您为什么要选择其中之一?我认为编译时多态性的编译代码会更大(为模板类型创建更多方法/类定义),并且编译时会给你更多的灵active,而运行时会给你“更安全”的多态性(即更难被意外错误使用)。我的假设是否正确?还有其他优点/缺点吗?谁能举一个具体的例子,说明两者都是可行的选择,但其中一个显然是更好的选择?此外,编译时多态性是否会产生更快的代码,因为不必通过vtable调用函数,或者这是否会被编译器优化掉?例子:classBase{virtualvoidprint()=0;}classDerive

c++ - 函数隐藏和重载的区别

我找不到函数隐藏和重载之间的任何区别。由于函数隐藏是派生类中存在的函数,隐藏了基类的函数。两者中的函数名称相同。重载:在派生类和基类中具有相同的名称但不同的签名。classA{voidprint(int);};classB:publicA{voidprint(float);};它是隐藏功能还是重载? 最佳答案 B::print函数隐藏父函数A::print。如果您想重载,您需要将A::print函数拉入B的范围:classB:publicA{public:usingA::print;//Pullin(all)A::printsymb

c++ - 访问虚拟派生类的成员/方法

这里的例子没有意义,但这基本上是我用Python编写程序的方式,现在我正在用C++重写它。我仍在努力掌握C++中的多重继承,在这里我需要做的是通过C的实例从main访问A::a_print。下面您将看到我在说什么。这可能吗?#includeusingnamespacestd;classA{public:voida_print(constchar*str){cout这是编译错误。test.cpp:Infunction‘intmain()’:test.cpp:6:error:‘voidA::a_print(constchar*)’isinaccessibletest.cpp:21:erro

vue 导出多页pdf, window.print()实现

如果你对分页打印没思路,而网上的现成方案又不适合,不妨进来看看,也许会对你有帮助.由于工作环境是局域网,对于插件的安装有限制,所以排除了jspdf+html2canvas的实现方式;采用window.print(),就会涉及到表格的截断、文本的截断等问题,而且需求要求每一页的pdf都有固定的页眉页尾,这里好像...好像又行不通了...但是能不能通过一种方式,把每页的内容都计算出来,然后再打印。顺着这种思路,首先需要计算页面中所有dom元素的高度,有没有一种方法可以循环获取当前页面所有dom的高度呢?vue中json可以循环、数组可以循环,既然ast语法书和vNode(虚拟dom)都可以渲染成真

C++ : Why I can't print a const char* with sprintf?

我在这里错过了什么?这让我抓狂!我有一个返回constchar*的函数constchar*Notation()const{chars[10];intx=5;sprintf(s,"%d",x);returns;}现在在代码的另一部分我正在这样做:..........charstr[50];sprintf(str,"%s",Notation());..........但str保持不变。如果我这样做:..........charstr[50];str[0]=0;strcat(str,Notation());..........str设置正确。我想知道为什么sprintf没有按预期工作...

c++ - 无法理解 C++ 中的可变参数模板

我在阅读可变参数模板时遇到了这个例子。书中提到要结束递归过程,使用函数print()。实在看不懂它的用途。为什么作者要使用这个空的print()函数?voidprint()//can'tgetwhythisfunctionisused{}templatevoidprint(constT&firstArg,constTypes&...args){std::cout 最佳答案 可变参数表达式可以捕获0个或更多参数。以调用print(1)为例。然后T捕获int和Types={}-它不捕获任何参数。因此调用print(args...);扩展

c++ - Arduino:命令 Serial.print ("some string text") 是否占用 SRAM?

我有一个相当大的Arduino项目(在eclipse中)使用Serial.print("somestringtext")命令进行大量调试消息,以便我可以一路调试。我注意到的一件事是我达到了项目中可以拥有的这些数量的限制。如果我放太多,程序会在非常奇怪的地方停止。即:通常在我最新添加的打印命令应该执行之前很久。目前我的项目.hex文件大约有20k。ArduinoUno限制在30kb左右,对吗?所以它不应该太大。所以我觉得实际的问题可能是这些串行命令正在填满我的sram。这只是2kb。我正在使用很多库。命令Serial.print("somestringtext")是否占用SRAM?gcc

c++ - 使用模板 "f(int[4][4])"时没有 "void f(int x[M][N])"的匹配函数?

#includetemplatevoidprint1(intsrc[M][N]){}voidprint2(intsrc[4][4]){}intmain(){intsrc[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},};print1(src);//giveserror//error:nomatchingfunctionforcallto'print1(int[4][4])'print2(src);//works!}在上面的代码中,print2()按预期工作,但是print1()给我错误error:nomatchingfunct

c++ - 在 C++ 中转发引用和转换构造函数

假设我想创建一个函数,通过引用获取左值和右值字符串参数,将它们转换为大写,并将它们打印到标准输出:voidupper_print(std::string&s);voidupper_print(std::string&&s);这工作正常,如下所示:std::strings("Helloworld");upper_print(s);upper_print(std::string("Helloworld"));upper_print("Helloworld");//convertingctorused但是,为了避免冗余,我想改用转发引用:templateupper_print(T&&s);不