草庐IT

c++ - 如果嵌套类型(未访问)带有无法编译的方法,是否可以实例化模板?

无意中发现g++(5.2.0)编译如下templatestructA{intx;structB{voidfoo(){x=1;}};};甚至统计A和A::B,提供成员(member)B::foo未使用。您合理地得到了x的编译错误作为A的非静态成员即使只是编译空操作语句&A::B::foo;.clang(3.6.2)然而拒绝模板,即使A根本没有实例化,因为它说非静态成员名称x不能在B内使用而只是阅读模板定义。这是g++中的错误还是clang对未实例化的模板成员过于严格? 最佳答案 x在您的代码中是一个非依赖名称,并且标准呈现一个无法有效

c++ - 为什么 static const char * template struct 成员没有初始化

我有一些C++11模板代码,我正在尝试移植到VisualC++Compiler2015。原始代码工作得很好,但是我需要重写它以解决constexpr的问题。Theoriginalcode(simplifiedexample)#includestructString{staticconstexprconstchar*value{"STRING"};};templateclassDerived{public:staticconstexprconstchar*value{Base::value};};templatestructFoo{staticconstexprconstchar*val

C++ 多结构 vector 错误

我正在尝试制作两个包含自定义结构的不同vector,但是当我尝试向vector添加元素时,它适用于“甲板”vector,但会引发“玩家”vector错误。我是C++的新手,不知道哪里出了问题。这些是它抛出的错误:warning:extendedinitializerlistsonlyavailablewith-std=c++11or-std=gnu++11|error:nomatchingfunctionforcallto'std::vector::push_back()'|这是我使用的代码:#include#include#includeusingnamespacestd;class

c# - 将 C++ 结构转换为 C# 以用于 UDP 通信

我正在编写一个程序,它将通过UDP与C++程序通信。另一个程序已经写好了(不是我写的)。我得到了一个.h文件,它定义了两个用于数据的结构。编辑:这意味着我无法更改数据格式。我需要能够根据C++.h文件结构进行读写!我如何在C#中执行此操作?我将以这种格式发送和接收数据。structmdata{uint32_tmark_kupnr;uint16_tmark_provnr;uint16_tmarkriktning;uint16_txpos;uint16_typos;};typedefstruct{uint32_tkupnr;uint16_tlngd;uint16_tbredd;uint16

python - Cython 扩展类 : How do I expose methods in the auto-generated C struct?

我现有的C++代码定义了一些我需要使用的类,但我需要能够将这些类发送到Python代码。具体来说,我需要在C++中创建类实例,创建Python对象作为这些C++对象的包装器,然后将这些Python对象传递给Python代码进行处理。这只是一个更大的C++程序的一部分,因此最终需要使用C/PythonAPI在C++中完成。为了让我的生活更轻松,我使用Cython定义扩展类(cdef类)作为我的C++对象的Python包装器。我使用的是典型格式,其中cdef类包含指向C++类的指针,然后在创建cdef类实例时对其进行初始化。因为如果我有一个现有的C++对象要包装,我也希望能够替换指针,所以

c++ - 无法在我的函数中声明结构

当我在主函数外定义一个struct时,没有问题。但是当我在main函数中定义它时,它不会编译。任何人都可以向我解释为什么或哪里是我的错误吗?这个有效:structstudent{charfirst[100];charlast[100];floatgrade3[3];floatave;};voidprint_out(structstudent[]);intmain(intargc,char*argv[]){structstudentdd;//...print_out(&dd);return0;}voidprint_out(structstudentst[]){//...}这不是:void

c++ - 结构对齐和类型重新解释

假设我有两种类型A和B。然后我做这个类型structPair{Aa;Bb;};现在我有这样的功能。voidfunction(Pair&pair);并假设function只会使用该对的a部分。那么这样使用调用函数是不是未定义行为?Aa;function(reinterpret_cast(a));我知道编译器可能会在成员之后插入填充字节,但它也可以在第一个成员之前插入吗? 最佳答案 我认为这是定义的行为,假设Pair是标准布局。否则,它是未定义的行为。首先,一个标准的布局类和它的第一个成员共享一个地址。[basic.compound]中

c++ - 处理 MSVC 宏中的额外括号

在某些情况下,您需要(a)有一个宏,(b)在(c)语言不允许括号的情况下将其参数之一括起来。简单的例子:#defineMAKE_STRUCT(name,base)structname:base{}structX{};MAKE_STRUCT(Y,X);//okMAKE_STRUCT(Z,(X));//error这是一个错误,因为我们需要一个类型名称并且我们得到了(。ecatmur通过利用有other允许使用额外括号的部分语言:templatestructargument_type;templatestructargument_type{typedefUtype;};#defineMAKE

c++ - 如何强制编译器显示隐式构造函数

gcc或clang有“-E”选项来运行预处理器并显示所有宏是如何展开的,对于隐式生成的方法我需要这样的东西。有没有办法强制gcc或clang为每个类打印隐式创建和删除的构造函数/析构函数/赋值运算符? 最佳答案 您可以使用模板类型特征作为从某些类型中提取此类信息的变通方法。这无法区分某些内容是被显式删除还是隐式删除,但是您可以肯定地知道您是否没有显式删除,例如#include#includestructA{A(constA&)=delete;};intmain(){std::cout将产生false,true,false,例如,当复

c++ - SSE 与类(class)保持一致

有一些非常奇怪的问题,作为c++的初学者,我不知道为什么。structDeviceSettings{public:....somevariablesDXSizeBackbufferSize;....somemethods};structDXPoint;typedefDXPointDXSize;__declspec(align(16))structDXPoint{public:union{struct{intx;inty;};struct{intwidth;intheight;};intdataint[2];__m128im;};DXPoint(void);DXPoint(intx,in