小编Ali*_*401的帖子

DLL 导出导致唯一指针问题

我有两个文件:

头文件.h

#pragma once

#ifdef UNIQUEPTRISSUE_EXPORTS
#define UNIQUEPTRISSUE_API __declspec(dllexport)   
#else  
#define UNIQUEPTRISSUE_API __declspec(dllimport)   
#endif 
Run Code Online (Sandbox Code Playgroud)

UniquePtrIssue.cpp

#include "stdafx.h"

#include "Header.h"

#include <memory>
#include <vector>

class UNIQUEPTRISSUE_API ClassA {

};

class UNIQUEPTRISSUE_API ClassB {
private:
    std::vector<std::unique_ptr<ClassA>> x;
};
Run Code Online (Sandbox Code Playgroud)

编译会引发以下错误:

1>d:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.14.26428\include\xutility(2443): error C2280: 'std::unique_ptr> &std::unique_ptr< _Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': 试图用 1> [ 1> _Ty 引用已删除的函数 1> =A级1>]

访问 a 的复制构造函数时似乎会出现类似的问题,unique_ptr但它们似乎并不适用。

从两个类声明中删除UNIQUEPTRISSUE_API/__declspec(dllexport)似乎会使错误消失。

显然,__declspec(dllexport)声明中发生了一些我不明白的事情。有什么办法可以unique_ptr在导出的类之间使用s 吗?

c++ stl dllexport c++14 c++17

3
推荐指数
1
解决办法
945
查看次数

在单个语句中在python中多次测试单个变量

我正在uni学习Python,并且被告知逻辑运算符和条件语句是如何工作的.我的问题是:有没有任何方法可以像这样压缩代码?

if (day != "Sunday" and day != "Saturday" and day != "Friday" and day != "Thursday" and day != "Wednesday" and day != "Tuesday" and day != "Monday"):
    print "That is not a day"
    return 0
Run Code Online (Sandbox Code Playgroud)

任何建议都表示赞赏,我理解上面的例子非常简单.

python syntax logical-operators conditional-statements python-2.7

2
推荐指数
1
解决办法
59
查看次数

在 C++ 中的重载运算符中使用局部变量

我正在尝试使用标准库优先级队列来对自定义类的对象进行排序Foo。但是,比较元素取决于它们在 unordered_map 中映射到的值map

我正在尝试构建这样的东西:

std::unordered_map<Foo,double> map;
struct Compare {
   bool operator()(const Foo& a, const Foo& b) {
      return map[a]<map[b];
   }
}
std::priority_queue<Foo,std::vector<Foo>,Compare> queue;
Run Code Online (Sandbox Code Playgroud)

然而,看起来我不允许引用封闭函数的局部变量。

实现这一目标的标准方法是什么?

c++ unordered-map std priority-queue

2
推荐指数
1
解决办法
111
查看次数