草庐IT

friend-function

全部标签

c++ - 为什么我不能将 std::function 用作 std::set 或 std::unordered_set 值类型?

为什么我不能有std::set或std::function的std::unordered_set?有什么办法让它正常工作吗? 最佳答案 您可以很好地创建一个std::set的功能。问题在于集合需要在其元素的值之间存在绝对顺序。此顺序由比较器定义,然后用于对集合的元素进行排序,检查元素是否已存在,并找到特定元素。不幸的是,函数之间不存在顺序。假设您有两个函数f1()和f2(),f1的含义是什么??此外,平等并没有真正定义。例如,如果您有intfun1(int){return1;}intfun2(int){return1;}functi

c++ - 尝试与 typedef 交 friend 时出现 "elaborated type refers to typedef"错误

假设我有以下代码(一个简单的CRTP类层次结构)。我想对基类类型进行typedef以节省自己的输入(在我的实际代码中,我多次使用基类类型并且基类采用多个模板参数),并且我需要与基类交friend,因为我想保留实现私有(private)。templateclassBase{public:voidfoo(){*static_cast(this)->foo_i();}};templateclassDerived:publicBase>{public:typedefclassBase>BaseType;private://Thishereistheoffendinglinefriendclas

c++ - 2个类(class)可以共享一个 friend 功能吗?

今天我对friend功能有疑问。两个类可以有相同的友元函数吗?说例子friendvoidf1();在A类和B类中声明。这可能吗?如果是这样,函数f1()是否可以访问两个类的成员? 最佳答案 一个例子将最好地解释这一点:classB;//definedlatervoidadd(A,B);classA{private:inta;public:A(){a=100;}friendvoidadd(A,B);};classB{private:intb;public:B(){b=100;}friendvoidadd(A,B);};voidadd(

c++ - friend 类不工作

我收到典型的“...在此上下文中是私有(private)的”错误。你能告诉我我做错了什么吗?为了便于阅读,代码被缩短了。在SceneEditorWidgetController类中:(设置对话框和这里使用的变量在标题中定义)SceneEditorPluginWidgetController::SceneEditorPluginWidgetController(){}voidSceneEditorPluginWidgetController::configured(){priorKnowledge_setting=settingsDialog->priorKnowledgeProxyFi

c++ - 为什么我会收到编译错误 "use of deleted function ' std::unique_ptr ...”

我收到一个巨大的编译错误信息c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18:error:useofdeletedfunction'std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=Deduction;_Dp=std::default_delete]'{returnbool(_M_comp(*__it1,*__it2));}当我将自定义比较器传递给STLset_difference函数时。我的代码:structValue{std::stringded_cod

c++ - 在 C++ 中,将 friend 添加到类中会改变其内存布局吗?

此外,您在类(class)的哪个位置声明friend有关系吗?添加友元类或友元函数有关系吗? 最佳答案 不,它没有。这纯粹是编译时的事情:类似于访问修饰符本身。尽管您将声明写在类中,但您并没有真正向类中添加friend。您基本上将其他东西声明为该类的友元,并简单地允许它访问该类的私有(private)成员,就好像它们是公共(public)的一样。 关于c++-在C++中,将friend添加到类中会改变其内存布局吗?,我们在StackOverflow上找到一个类似的问题:

C++ - 派生类中的 "Member function not declared"

我在MSVC++2008中遇到问题,其中VS2008抛出此编译错误:errorC2509:'render':memberfunctionnotdeclaredin'PlayerSpriteKasua'现在,令我困惑的是render()已定义,但在继承的类中。类定义是这样的:SpriteBase-InheritedBy->PlayerSpriteBase-InheritedBy->PlayerSpriteKasua因此,SpriteBase.h的简化版本如下:classSpriteBase{public://Variables===============================

c++ - 如何使 C++11 函数采用 function<> 参数自动接受 lambdas

C++11有lambda和std::function,但不幸的是,它们有不同的类型。一个结果是不能直接在高阶函数中使用lambda,例如lisp中的map。例如,在下面的代码中#include#includeusingnamespacestd;templatevectormap(std::functionf,vectorarr){vectorres;for(inti=0;ia={1,2,3};map([](intx)->int{returnx;},a);//notOKautoid_l=[](intx)->int{returnx;};map(id_l,a);//notOK;functio

C++ 错误 LNK2001 : unresolved external symbol function _main

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?我正在学习C++,但在我的项目中遇到编译问题。我已经阅读了大量标题上有此错误的帖子,但我找不到问题出在哪里。我的Main函数中有一个方法调用是导致错误的原因。每当我评论该项目编译完美的行。代码如下:main.cpp#pragmaonce#include"stdafx.h"#include#include#include#include#include#include"N

c++ - boost 日志 : How to prevent the output will be duplicated to all added streams when it uses the add_file_log() function?

我使用add_file_log()函数来初始化一个日志接收器,它将日志记录存储到一个文本文件中。当我定义多个接收器时,我观察到:为每个接收器创建一个文件。输出被复制到所有文件。这是我的记录器:classlogger{public:logger(constlogger&)=delete;logger(logger&&)=delete;logger&operator=(constlogger&)=delete;logger&operator=(logger&&)=delete;staticlogger&get_instance(conststd::string&file,boolconso