gpt4 book ai didi

c++ - 将 Windows 代码移植到 Mac

转载 作者:行者123 更新时间:2023-11-28 06:14:06 38 4
gpt4 key购买 nike

我正在将 C++ 代码从 Windows 迁移到 Mac。我选择使用 C++ 语言的 OS X 命令行工具。

这是代码片段:

    #ifndef __PRIORITYQUEUE_H__
#define __PRIORITYQUEUE_H__
#include <queue>

template <typename T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>>
class PriorityQueue : public std::priority_queue<T, Container, Compare>
{
public:
PriorityQueue() {}
PriorityQueue(const PriorityQueue& pq) {priority_queue(pq);} // line:13
explicit PriorityQueue(const Compare& compare) {priority_queue(compare);}
PriorityQueue(const Compare& compare, const Container& container) {priority_queue(compare, container);}
template<class Iter> PriorityQueue(Iter first, Iter last) {priority_queue(first, last);}
template<class Iter> PriorityQueue(Iter first, Iter last, const Compare& compare) {priority_queue(first, last, compare);}
template<class Iter> PriorityQueue(Iter first, Iter last, const Compare& compare, const Container& container) {priority_queue(first, last, compare, container);}
......
#endif

还有其他文件会包含这个头文件。当我编译它时,发生以下错误:

  1. /Users/yingyhe/Projects/SASCode/SASPRLib/PriorityQueue.h:13:53: 未知类型名称“priority_queue”;您是说“优先队列”吗?
  2. /Users/yingyhe/Projects/SASCode/SASPRLib/PriorityQueue.h:13:68:'pq'的重新定义

似乎这个头文件被多次包含,但我使用#ifndef - #define - #endif 来避免这种情况。

然后我把这个头文件放到一个新的项目中,没有其他文件包含它,就可以编译成功了。是有线的,谁能告诉我为什么?非常感谢!!!

最佳答案

您忘记了 std:: 前缀。

我怀疑您通常在包含此文件之前还 using namespace std; 包含此文件。

但是还有更多的问题。

首先,标准库容器不是为用作基类而设计的。
不要这样做。

基类是在初始化器列表中初始化的,而不是像在构造函数体中那样。 java :

PriorityQueue(const PriorityQueue& pq) : std::priority_queue(pq) {} 

您会收到重定义错误,因为您正在声明一个与参数同名的局部变量。

在函数体中,

std::priority_queue(pq);

相当于

std::priority_queue pq;

这遵循“如果它可以是一个声明,它就是一个声明”的规则。

如果没有其他文件包含头文件,它根本不会被编译,这就是它在这种情况下起作用的原因。 它将针对包含在其中的每个源文件编译一次,这是预期的 - “include guards”防止在一个翻译单元中多次包含,并且每个翻译单元都是单独编译的。

关于c++ - 将 Windows 代码移植到 Mac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668019/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com