草庐IT

forward-declaration

全部标签

c++ - "gets() was not declared in this scope"错误

这个问题在这里已经有了答案:whyg++shows"gets()"notdeclared,evenafterincluding(3个答案)关闭2年前。使用以下代码,我得到“gets()未在此范围内声明”错误:#include#includeusingnamespacestd;intmain(){//stringstr[]={"Iamaboy"};stringstr[20];`gets(str);cout

c++ - init-declarators 的完整表达式的定义

在init-declarator的情况下完整表达式的定义据说“包括”初始化程序的组成表达式,以及应用的任何转换/隐式调用的函数(构造函数)。这意味着完整表达式甚至不需要是表达式,这没有意义,因为它被称为一个(初始化声明符不是表达式)。进一步在标准中,完整的表达式被用作表达式,那么如果它可以包含不相交的表达式,甚至不是表达式的东西,那有什么意义呢?无论如何,我的主要问题是为什么不总是表达式的完整表达式被视为表达式?这应该如何运作? 最佳答案 Thismeansthatafull-expressionneednotevenbeanexp

c++ - 如何转发声明 boost::ptree::iterator

我想在我的项目中使用boostptree,但由于ptree.hpp导致包含另外1000个头文件,这大大增加了编译时间(例如从1秒到7秒),并且因为它在20多个不同的cpp文件中需要这是NotAcceptable(预编译的header不会改善太多)。所以我正在考虑将boostptree封装在我自己的类中,比如//myptree.h#includeclassmyptree{private:boost::property_tree::ptree*m_tree;public:...//addingnew(singlevalue)memberstothethetreevoidput(consts

c++ - 前向声明不适用于转换运算符

考虑下一段代码:#includeusingnamespacestd;classB;classA{public:A(){p=1;}intp;operatorB(){Bb;b.x=this->p;returnb;}};classB{public:intx;};intmain(){Aa;Bb=a;return0;}我正在尝试将A转换为B,但我得到以下编译器提示:..\main.cpp:13:error:returntype'structB'isincomplete当我这样做时:#includeusingnamespacestd;classB{public:intx;};classA{publ

c++ - "duplicate data type in declaration"是什么意思?

请看一下这段代码:QListcontainerList;autowasAlreadyMoved=[&containerList](cItem*item)->bool{//contains(item))returntrue;returnfalse;};我在Ubuntu13.04下使用QtCreator2.8.0和Qt5.1.0。我还使用Clang3.2.1作为编译器。上面的代码编译正常(没有错误,没有警告),但是QtCreator用红线在标记的代码行下划线(就像错误一样):如果我将鼠标悬停在它上面,它会显示“声明中的重复数据类型”,我不知道这是什么意思。它是最简单的lambda,我没有发

c++ - "no ' operator++(int) ' declared for postfix '++ ' [-fpermissive]"枚举

这个问题在这里已经有了答案:HowcanIiterateoveranenum?(28个答案)Whycan'tIincrementavariableofanenumeratedtype?(10个答案)关闭9年前。我有枚举enumProgramID{A=0,B=1,C=2,MIN_PROGRAM_ID=A,MAX_PROGRAM_ID=C,}CurrentProgram;现在,我正尝试像这样递增CurrentProgram:CurrentProgram++,但编译器提示:没有为后缀'+声明'operator++(int)'+'[-fpermissive]。我认为有这样一个运算符可以增加“枚

c++ - 错误 : 'ios_base' has not been declared

我正在使用libcurl下载序列化代码并将其打开,但是,我收到一个错误,看起来fstream丢失了,但它包含在内。我环顾四周,但很少发现错误。下面是错误和代码。错过了什么?编译错误输出g++-gtestGetprice2.cpp-otestGetprice2.o-std=gnu++11-lcurltestGetprice2.cpp:Infunction'intgetData()':testGetprice2.cpp:45:56:error:'ios_base'hasnotbeendeclaredtestGetprice2.cpp:45:72:error:'ios_base'hasnot

c++ - 为什么转发引用需要 std::forward

这个问题在这里已经有了答案:Whatarethemainpurposesofstd::forwardandwhichproblemsdoesitsolve?(7个答案)关闭5年前。在这样的函数模板中templatevoidfoo(T&&x){bar(std::forward(x));}不是xfoo中的右值引用,如果foo用右值引用调用?如果使用左值引用调用foo,则无论如何都不需要强制转换,因为x也将是foo内部的左值引用.还有T将被推导为左值引用类型,因此std::forward不会改变x的类型.我使用boost::typeindex进行了测试使用和不使用std::forward时,

静态类成员的 C++ 前向声明

我有一个类:classM{public:staticstd::stringt[];};稍后进行初始化。我想稍后在不同的类(头文件)中使用M::t:classUse{public:voidf(){std::cout有没有办法不把整个M类包含在Use的头文件中?我知道前向声明不允许访问类成员,但是这种美是静态的,所以对编译器来说应该不是一个大问题.. 最佳答案 不,你不能。您可以在header中包含header,或者在实现文件中分离实现Use::f并在其中包含M的header。 关于静态类成

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"