gpt4 book ai didi

C++无法使用初始化列表初始化临时

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:20 25 4
gpt4 key购买 nike

我有一个定义数据结构的类(我们称它为 A),我想通过一些基本操作(下一个、上一个、元素、有效...)为它创建一个简单的迭代器。

迭代器.h

#include "A.h"

class Iterator {
private:
A* a;
int current;
public:
Iterator(A* _a) : a(_a) { current = 0; }
};

在我的 A 类中,我创建了一个函数 iterator(),它应该返回一个迭代器,我想到了这样的事情:

啊啊

#pragma once
#include "Iterator.h"

class A {
private:
int some_data;
public:
friend class Iterator;
A(int x) : some_data(x) {}
~A();

Iterator iterator() { return Iterator{ this }; }
};

但我收到此错误:“无法使用初始化列表初始化类型为“Iterator”的临时文件”。我想要做的就是从类 A 中的 iterator() 函数创建并返回一个 Iterator 对象。

注意:我在项目的单独标题中有这些类。我使用 Visual Studio。

最佳答案

你有一个循环依赖。您的 A.h 包含 Iterator.h,反之亦然。由于 #pragma once 没有完全按照您的预期进行,结果是编译器尝试编译

class Iterator {
private:
A* a;
int current;
public:
Iterator(A* _a) : a(_a) { current = 0; }
};

class A {
private:
int some_data;
public:
A(int x) : some_data(x) {}
~A();

Iterator iterator() { return Iterator{ this }; }
};

这失败了,因为它在 A 定义之前使用了 A。它失败并显示非常困惑的错误消息,但您只查看了它们中的最后,而第一个错误消息至少指出了问题所在。

不是让 Iterator.h 包含 A.h,而是提供 A 的前向声明:

class A;

关于C++无法使用初始化列表初始化临时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990279/

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