【问题标题】:Reference to class is ambiguous when compiling with g++4.5.2使用 g++4.5.2 编译时对类的引用不明确
【发布时间】:2012-11-16 00:38:02
【问题描述】:

我需要一些帮助:当使用 g++ 4.1 构建我的代码时,没有关于“对类的引用不明确”的错误。仅在使用g++4.5.2编译相同代码时才会出现,代码片段如下:

#include "tlm_utils/simple_initiator_socket.h"

using tlm_utils::simple_initiator_socket;

class HvEcu : public sc_module {
public:
           ......
    simple_initiator_socket<HvEcu> initiator_socket;
//object instantiated here, also problem happend here....
            ......
};

我真的不确定为什么会发生这种情况,因为命名空间的语法肯定是有效的。 有一个解决方法可以消除该消息,而不是“使用 tlm_utils::simple_initiator_socket;”只需输入“tlm_utils::simple_initiator_socketinitiator_socket;”在上面显示的类的主体中。但是我不明白为什么上面的代码不起作用,因为唯一的变化是编译器版本。

【问题讨论】:

  • 您的代码不足以确切地知道问题出在哪里,但我假设您在主范围内有一个名为 simple_initiator_socket 的类,并且 GCC 很困惑。
  • @MaëlNison:这两个编译器版本不会失败吗?
  • 也许“旧”版本的 GCC 假设 using 语句意味着开发人员明确想要使用命名空间的 simple_initiator_socket ?我不太确定,但这可能是一种解释。
  • @MaëlNison:很有趣。 user960095,您可以尝试删除 using 行以查看它的反应吗?还是使用tlm_utils::simple_initatior_socket&lt;HvEco&gt;作为类内字段的类型?
  • @Maël Nison 问题是:在尝试使用模板中的 HvEcu 类型初始化initiator_socket 之前,HvEcu 类声明未完成

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


【解决方案1】:

尝试使用显式调用:

class HvEcu : public sc_module {
    tlm_utils::simple_initiator_socket<HvEcu> initiator_socket;

每日一课:及时了解编译器更改并使用最新的稳定版本。否则,你最终会写出旧的错误代码;并遇到编译器的其他副作用。

【讨论】:

  • 正如我之前提到的,当将 using 行保留在那里时,它可以工作并构建,但是在 4.5.2 中编译时,修复方法是删除 using 行并执行 tlm_utils::simple_initatior_socket而是在体内。问题是为什么,为什么原来的版本不再被识别???
  • @user960095:似乎还有另一个simple_iniatior_socket,没有其他代码,我们不知道为什么。
  • 是的,这是 TLM 标准库的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2021-02-19
  • 1970-01-01
相关资源
最近更新 更多