草庐IT

forward-declaration

全部标签

c++ - GCC 编译错误 : declaration of ‘strlen’ must be available

我的问题是,当我想制作一个下载的库时,我从GCC得到了一些奇怪的编译错误。编译器要求更正的代码似乎是正确的。报错都是这样的:Catalogue.h:96:error:therearenoargumentsto‘strlen’thatdependonatemplateparameter,soadeclarationof‘strlen’mustbeavailable这是第96行附近的代码:GaCatalogueEntry(constchar*name,T*data){if(name){_nameLength=(int)strlen(name);//LINE96//copyname_name

C++ 风格约定 : Parameter Names within Class Declaration

我是一个相当新的C++程序员,我想听听支持和反对在类声明中命名参数的争论。这是一个例子:Student.h#ifndefSTUDENT_H_#defineSTUDENT_H_#includeusingnamespacestd;classStudent{private:stringname;unsignedintage;floatheight,GPA;public:Student(string,unsignedint,float,float);voidsetAge(unsignedint);};#endif/*STUDENT_H_*/对比#ifndefSTUDENT_H_#defineS

c++ - 使用数组作为元组成员 : Valid C++11 tuple declaration?

下面的代码可以在G++4.7.2中正常编译:#includestd::tuplex;但是,使用clang++3.2会产生以下错误:错误:数组初始化器必须是一个初始化器列表。如果我从元组声明中删除float类型,错误就会消失。上面的元组声明是否有效?($CXX-std=c++11-c文件.cpp) 最佳答案 我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够用作初始化器、可复制构造、可复制分配和移动分配,分别(§20.4.2.1)。这些都不是数

c++ - 如何填充 'Tree' 结构 'Declaratively'

我想定义一个“节点”类/结构,然后在代码中声明这些节点的树,使代码格式化的方式反射(reflect)树结构,并且没有“太多”样板的方式。请注意,这不是关于数据结构的问题,而是关于我可以使用哪些C++功能来获得与以下示例类似的声明式代码风格的问题。可能使用C++0X这会更容易,因为它在构建对象和集合方面具有更多功能,但我使用的是VisualStudio2008。示例树节点类型:structnode{stringname;node*children;node(constchar*name,node*children);node(constchar*name);};我想做什么:声明一棵树,使

c++ - 将 Q_DECLARE_METATYPE 与可能被多次加载的 DLL 一起使用

将Qt4.8与C++结合使用。我正在使用在运行时加载和卸载的应用程序插件。在应用程序的生命周期中,同一个插件可能会被加载多次。其中一个插件对需要存储在QVariant中的某些类型使用Q_DECLARE_METATYPE。稍后重新加载插件时,旧声明仍指向现在卸载的库的原始内存空间。当Qt尝试从重新声明的元类型创建QVariant时,这会导致访问冲突。我们已经处理了qRegisterMetaType()的类似问题:我们在加载库时注册元类型,并在卸载库之前注销这些类型。不幸的是,在声明而不是注册元类型时,这似乎不是一个选项。我们如何有效处理声明元类型的库被多次加载和卸载的情况?

c++ - 试图更好地理解 std::forward、std::move

我正在编写一个基本的类模板。它的参数有两种参数类型。该类(class)的想法是将一种类型作为constref接受。另一个是ref.该类的功能是转换类型A输入B正在创建的对象最终将成为b.我想要perfect-forwarding或movesemantics此类模板的有效部分。现在这是我当前的类,只有基本类型,但计划使用可变参数结构将其扩展到任何2种类型。#ifndefCONVERTER_H#defineCONVERTER_H#includetemplateclassConverter{private:Fromin_;Toout_;public://WouldlikeforFromint

命名空间中的 C++ 前向声明和友元

根据C++标准ISO/IEC14882:2003(E)中的7.3.1.2命名空间成员定义Everynamefirstdeclaredinanamespaceisamemberofthatnamespace.Ifafrienddeclarationinanon-localclassfirstdeclaresaclassorfunction(thisimpliesthatthenameoftheclassorfunctionisunqualified)thefriendclassorfunctionisamemberoftheinnermostenclosingnamespace.//As

c++ - 如何声明两个类使得 A 具有 B 的成员并且 B 将 A 的成员标记为 friend ?

我正在尝试做C++Primer第5版中的练习7.32。该练习要求以下内容:DefineyourownversionsofScreenandWindow_mgrinwhichclearisamemberofWindow_mgrandafriendofScreen.下面是文中给出的Screen、Window_mgr和clear的定义。classScreen{public:usingpos=std::string::size_type;Screen(posht,poswd,charc):height(ht),width(wd),contents(ht*wd,c){}private:poshe

c++ - 使用 C+11 和 Newlib 时出现错误 "sigemptyset was not declared in this scope"

在Newlib下的Cygwin上使用sigemptyset时,我们会捕获编译器错误。该错误发生在C++编译器中,但仅在使用-std=XXX时才会发生。如果没有标准选项,测试程序将按预期编译和执行。下面是测试程序,后面是感兴趣的Cygwin头文件。我在Cygwinheader中没有看到任何可疑的内容。我尝试过像#define_GNU_SOURCE和#define_XOPEN_SOURCE700这样的技巧。我还尝试过使用全局和std命名空间等技巧。相关见Whatdoes-D_XOPEN_SOURCEdo/mean?和Namespaceissuesinc++11?.编译失败的原因是什么,我该

c++ - 在其声明之上调用函数

voidfoo(){bar();//error:‘bar’hasnotbeendeclared}voidbar(){}namespaceN{voidfoo(){N::bar();//error:‘bar’isnotamemberof‘N’}voidbar(){}}classC{staticvoidfoo(){C::bar();//worksjustfine}staticvoidbar(){}};在函数声明之上处理函数调用的这种不一致背后的基本原理是什么?为什么我可以在类中执行此操作,但不能在命名空间或全局范围内执行? 最佳答案 您可