草庐IT

c++ - 没有可行的重载 '='

我现在正在参加C++模拟类(class),我收到标题中引用的clang++错误。我希望有人能告诉我原因,因为我似乎无法在任何地方找到类似情况的类似错误(尽我所能搜索)。每个Office*变量定义(第187到190行)都会出现错误。175classEventHandler{176177private:178doublesimulation_time;//currentsimulationtime179Office*aid,bursar,registrar,parking;180Event*current_event;181MinHeap*time_heap;182183public:18

c++ - 在 CUDA 中初始化 dim3 变量, "dim3 dimGrid(numBlocks);"语法如何工作?

我正在学习CUDA,在大量示例代码中我看到block和网格维度设置如下:dim3dimGrid(numBlocks);dim3dimBlock(numThreadsPerBlock);exampleKernel>>(input);我知道像dim3dimGrid(numBlocks);这样的行正在初始化dimGrid,一个dim3类型的变量,将numBlocks作为它的x值-但我'我不确定这是如何工作的。我只是假设它是普通的C++语法,但对于C++,我认为该行必须这样写:dim3dimGrid=dim3(numBlocks);否则你会得到“最令人烦恼的解析”。所以我假设将这些行解释为变量

c++ - 为什么 virtual void test()=00 有效但 virtual void test()=+0 和 virtual void test()=-0 无效?

我搜索了一些关于虚函数声明的帖子,相信=0在virtualvoidtest()=0;是固定句法所以virtualvoidtest()=NULL;virtualvoidtest()=false;virtualvoidtest()=1-1;virtualvoidtest()=0.0;和其他声明应该是无效的。但是我发现了virtualvoidtest()=00;virtualvoidtest()=000;virtualvoidtest()=0000;还能编译,为什么?还有,我觉得整数+0和-0其实和0一样(不知道对不对),就像00其实就是0一样,为什么virtualvoidtest()=+0

c++ - 如何调用模板类的模板构造函数?

templatestructA{templateA(){}templatestaticvoidf(){}};intmain(){A::f();//okautoa=A();//errorC2062:type'double'unexpected}问题在代码中是不言而喻的。我的问题是:如何调用模板类的模板构造函数? 最佳答案 您不能直接调用类的构造函数。如果您无法从调用中推断出构造函数的模板参数,则无法调用该特定构造函数。您可以做的是创建某种可用于零开销扣除的类型包装器:templatestructtype_wrapper{};templ

c++ - 复制构造函数相关问题(原生 C++)

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhyshouldthecopyconstructoracceptitsparameterbyreferenceinC++?我知道复制构造函数必须有一个引用作为参数,以避免对其自身进行“无限次调用”。我的问题是-为什么会发生这种情况,其背后的逻辑是什么?CExample(constCExample&temp){length=temp.length;}

c++ - 为什么我们应该在全局函数/对象上使用 "::"运算符?

我在很多地方都看到过这种用法。C++程序员通常会在全局函数调用之前使用::运算符。例如::glGenBuffers(1,&id);这是为什么?为什么不直接使用:glGenBuffers(1,&id); 最佳答案 避免意外的命名空间冲突。例如,如果您当前的命名空间将具有glGenBuffers,它与具有::的“好”glGenBuffers不同,您可以指定调用glGenBuffers位于全局命名空间中。 关于c++-为什么我们应该在全局函数/对象上使用"::"运算符?,我们在StackOve

c++ - `(c = *str) != 0` 是什么意思?

intequiv(char,char);intnmatches(char*str,charcomp){charc;intn=0;while((c=*str)!=0){if(equiv(c,comp)!=0)n++;str++;}return(n);}“(c=*str)!=0”到底是什么意思?有人可以向我解释一下或帮助我提供正确的术语以自己搜索解释吗? 最佳答案 这个表达式有两部分:c=*str-这是通过取消引用指针对c的简单赋值,val!=0-这是与零的比较。这是可行的,因为赋值是一个表达式,即它有一个值。赋值的值与被赋值的值相同,

c++ - 错误 C2059 : syntax error : 'constant'

我有一段自动生成的代码,它使用VisualStudio2008Express在Linux上编译,但在Windows上编译不了。我遇到的问题是我不明白编译器错误。我不认为我可以发布确切的代码,所以这是它的一个净化版本...声明静态常量DELETE的行报告错误。注意:编译此文件时不会显示编译器错误-它成功构建到库中,但会显示在包含header的第二个项目中(间接)。我相信至少还有一两个其他项目将它间接包含在解决方案中——它们在编译时没有问题。File_A.h:enumLONG_TYPE_NAME{ENUM_NAME_PREFIX_ADD=0,ENUM_NAME_PREFIX_CHANGE=

c++ - 函数声明中的 C++ 中的 -> 是什么

这个问题在这里已经有了答案:Whatis"->"afterfunctiondeclaration?(1个回答)关闭9年前。在关于decltype的维基百科文章中http://en.wikipedia.org/wiki/Decltype我遇到了这个例子:int&foo(int&i);floatfoo(float&f);templateautotransparent_forwarder(T&t)−>decltype(foo(t)){returnfoo(t);}虽然我理解这个函数背后的动机,但我不理解它使用的语法,特别是声明中的->。什么是->以及它是如何解释的?编辑1基于以上:这里有什么问

c++ - C(或 C++?)语法 : STRUCTTYPE varname = {0};

通常人们会在堆栈上声明/分配一个结构:STRUCTTYPEvarname;此语法在C中意味着什么(或者此语法仅适用于C++,或者可能特定于VC++)?STRUCTTYPEvarname={0};其中STRUCTTYPE是结构类型的名称,如RECT或其他。这段代码可以编译,它似乎只是将结构的所有字节归零,但我想确定是否有人有引用。另外,这个构造有名称吗? 最佳答案 这是聚合初始化并且是有效的C和有效的C++。C++还允许您省略所有初始化器(例如零),但对于这两种语言,没有初始化器的对象是值初始化的或零初始化的://C++code:st