【问题标题】:Please help me find the actual error in this jungle of compiler errors请帮我在这个编译器错误丛林中找到实际错误
【发布时间】:2012-05-03 09:33:52
【问题描述】:

我终其一生都无法弄清楚编译器想从我这里得到什么。

任何对编译器消息有经验的人都可以帮我破译它想要什么吗? 我什至无法提供代码位,因为我不知道发生了什么。

我正在使用带有 -std=c++11 的 g++-4.7

http://pastebin.com/AxYMd6L8

它似乎抱怨 SimpleMapSquare 以及它作为分配器的一些东西? 不是那样的。 SimpleMapSquare 定义为:

#pragma once

namespace BlackDragonEngine
{
struct SimpleMapSquare
{
  int TileID;
};
}

我昨天写了大约 400 多行模板化代码,只是试图在我的主应用程序中包含它的标头,结果发生了这种情况......

我什至不知道从哪里开始...请帮忙。

编辑: 在我的项目中搜索“vectorhttp://i.imgur.com/g8L1l.png
我扩展了相关文件(我昨天创建的文件)

我写这么多代码没有测试的原因是因为我正在将我的引擎从 C# 转换为 C++,所以逻辑方面已经是正确的,我无法测试不完整的代码。

编辑 2: 以下是“SimpleMapSquare”http://i.imgur.com/zedkh.png的所有用法@

EDIT3:
感谢 Konrad,我能够查明确切的行并找到错误...忽略上面的搜索,因为我忘记包含 *.inl 文件(模板代码实现所在的位置)

【问题讨论】:

  • 尝试将您的代码分成一些更小的单元,并一次处理一个。如果您一次编写 400 行代码,如您所发现的那样进行调试将是一场噩梦。如果不查看所有来源,就很难为所有这些问题提供答案......
  • 第一课:不要编写 400 段未经测试/未编译的代码。一点一点地编写和测试。
  • 下次请提供相关代码!错误消息清楚地显示了错误的上下文(所有提到“此处需要”的内容都是无用的)。
  • "我什至不知道从哪里开始。" 从第一个错误开始,然后一个一个地修复它们。这是传统的做法。
  • @SigTerm 但没有包含实际错误的行。只是在编译器内部文件中涉足...

标签: c++ compiler-errors g++


【解决方案1】:

您正在某处使用以下类:

class std::vector<sf::Vector2<int>, BlackDragonEngine::SimpleMapSquare>

std::vector 的第二个类型参数是分配器类型!

【讨论】:

  • 我也是这么想的,但是我搜索了一下,没有找到这样的用途。以下是搜索结果:i.imgur.com/g8L1l.png我扩展了我昨天创建的相关类。
  • @xNidhogg 请注意,可能到处都有空格,如vector &lt; 尝试搜索SimpleMapSquare 的用法。但即使这样也不是万无一失的,因为它可能会在模板中使用。 但这都是不必要的,因为错误信息会给你一个行号! … TileMap.inl:42
  • @KonradRudolph 这就是我所需要的。线...谢谢。我仍然无法在 pastebin 本身中找到它,但我设法修复了错误。愚蠢的我没有搜索 *.inl 文件...谢谢
  • @xNidhogg 不幸的是,没有。它只需要练习和大量的决心和耐心。我不得不处理大小大于 5 MB 的编译器消息……很有趣!一个提示可能是:您可以通过替换深度嵌套的模板来使消息更清晰,例如std::basic_string&lt;char, …&gt; by string 并通常删除所有 std:: 限定符(但这有时也可能掩盖真正的错误)。
【解决方案2】:

看起来 SimpleMapSquare shold 包含类型 value_typepointerreference 的定义。

就像 STL 将 SimpleMapSquare 视为迭代器、分配器或其他需要类的特征。

您是否将它作为错误的参数传递给某处?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2022-10-17
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多