草庐IT

用不完

全部标签

c++ - std::unique_ptr<T> 不完整类型错误

我有templateclassqueue{private:structnode{Tdata;std::unique_ptrnext;//compileerroronincompletetypenode(T&&data_):data(std::move(data_)){}};std::unique_ptrhead;node*tail;public:queue():tail(nullptr){}我在VS10的标记行上遇到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板-构造函数-这里以int为例)?有解决方法吗?编辑singlethreadedqueue.h(62):e

c++ - 不完整类型和前向声明的无效使用

我试图解决这个问题,但我对前向声明的理解肯定存在一些误解。我收到以下错误:src/algorithm.cpp:Inconstructor‘Algorithm::Algorithm(MainWindow*)’:src/algorithm.cpp:22:20:error:invaliduseofincompletetype‘structUi::MainWindow’src/mainwindow.h:23:10:error:forwarddeclarationof‘structUi::MainWindow’我有这些文件(我省略了一些行和文件并只粘贴了相关代码):算法.cpp#include"

c++ - 不完整类型 'class Ui::dialog 的使用无效(QT 错误)

我想制作一个带有按钮的简单QT主窗口以打开第二个窗口或对话框。我从字面上遵循了QT链接“在您的应用程序中使用设计器UI文件”中的步骤,并遵循了单一继承示例。但是QT给出了4个错误,您将在下面看到一个快照。现在,我所做的是在Qt设计器中创建一个主窗口,然后我将第二个窗体添加到项目中,这将是单击按钮时的第二个对话框窗口。因为我手动创建了表单“mydialog.ui”,所以我添加了类“mydialog.h和mydialog.cpp”,并将“ui-mydialog”的标题放在源文件“mydialog.cpp”中。我不确定我错过了什么?代码如下:-mydialog.h#ifndefMYDIALO

c++ - 指向类型不完整的 typedef 的指针

有什么方法可以声明一个指向不完整类型的指针,该类型将由实现中的typedef设置?这是我想要的例子:#ifndefTEST_H#defineTEST_Hnamespacestd{classstring;//THISWON'TWORK!}structTest{std::string*value;};#endifstring是basic_string的类型定义,因此示例中的代码将不起作用。我可以声明一个不完整类型的std::basic_string,但这看起来像是一种解决方法。我知道编译器不会为typedef生成符号,对于不同文件中的不同类型,可能会在typedef中使用相同的名称。但由于

c++ - 循环依赖/不完整类型

在C++中,我遇到循环依赖/不完整类型的问题。情况如下:Stuffcollection.h#include"Spritesheet.h";classStuffcollection{public:voidmyfunc(Spritesheet*spritesheet);voidmyfuncTwo();};Stuffcollection.cppvoidStuffcollection::myfunc(Spritesheet*spritesheet){unsignedintmyvar=5*spritesheet->spritevar;}voidmyfunc2(){//}Spritesheet.h

c++ - 为什么不能将不完整的类型转换为 void?

为什么下面的代码会报如下错误?为什么类型需要完整才能转换为void?structIncomplete;classClass{virtualvoidfoo(Incomplete&incomplete){(void)incomplete;throwstd::logic_error("notimplemented");}};错误:errorC2027:useofundefinedtype'Incomplete'seedeclarationof'Incomplete' 最佳答案 这是C和C++之间的变化,Microsoft以前在C++中实现

c++ - Boost Spirit 信号成功解析,尽管 token 不完整

我有一个非常简单的路径构造,我正在尝试使用boostspirit.lex进行解析。我们有以下语法:token:=[a-z]+path:=(token:path)|(token)所以我们在这里只讨论冒号分隔的小写ASCII字符串。我有三个示例“xyz”、“abc:xyz”、“abc:xyz:”。前两个应该被认为是有效的。第三个以冒号结尾,不应被视为有效。不幸的是,我的解析器认为这三个都是有效的。语法不应允许空标记,但显然spirit正在这样做。我错过了什么让第三个被拒绝?此外,如果您阅读下面的代码,在注释中有另一个版本的解析器要求所有路径以分号结尾。当我激活这些行时,我可以获得适当的行为

c++ - 字段类型不完整

我得到错误的“字段有不完整的类型”,但也不知道为什么。有人能帮忙吗?谢谢!g++-pipe-W-Wall-fopenmp-ggdb3-DDEBUG-fno-omit-frame-pointer-c-otest.o../../src/test.ccInfileincludedfrom../../src/test.cc:50:../../src/feature_haar.h:14:error:field‘_count’hasincompletetype抄袭#include"feature_count.h"#include"feature_random_counts.h"#include"f

c++ - C++11 std::bind 的链式调用不起作用

我在调用嵌套的std::bind表达式时遇到问题。下面的代码演示了这个问题。它无法使用libc++进行编译,但可以使用boost:#defineBOOST0#ifBOOST#include#includeusingboost::function;usingboost::bind;#else#includeusingstd::function;usingstd::bind;usingstd::placeholders::_1;#endifintsum(inta,intb){returna+b;}//workstemplateintyeah(Ff,intc){returnf(c);}//b

c++ - C和C++不完全数组指针转换规则的区别

当我用gcc和g++编译以下代码时,g++给出了错误,而不是gcc。请注意,代码从int(*)[4]转换为int(*)[](这是指向不完整数组类型的指针)。intarr[4];int(*p_arr)[]=&arr;如Incompletearraytype?中所述,C语言允许这种转换。但是为什么C++不允许这样做并给出错误error:cannotconvert‘int(*)[4]’to‘int(*)[]’inassignment。我知道C++比C更类型安全,但是这个赋值真的是类型不安全的,因为后来对指针的取消引用(例如sizeof(*p_arr))无论如何都会在中给出错误C也是吗?