首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问非静态方法questaSim是非法的

访问非静态方法questaSim是非法的
EN

Stack Overflow用户
提问于 2014-07-24 13:53:20
回答 2查看 301关注 0票数 2

当我尝试用vlog编译时,我得到了错误vlog,而vcs,让我们不费吹灰之力地通过它。任何人都有解决这个问题的窍门。

代码语言:javascript
复制
function foo_class::error(string expression, string filename, int linenumber);
  foo_base::foo_base_error(expression, filename, linenumber);
endfunction
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-24 16:27:31

我假设foo_classfoo_base的子级,在这种情况下使用super.foo_base_error而不是foo_base::foo_base_error

要调用非静态方法,它需要属于一个对象.不能直接从类范围调用它。静态方法可以直接从类范围调用。

您的VCS日志文件中应该有警告。模拟器可能是宽容的,或者使foo_base_error静态化,或者在内部将foo_base::转换为super.。questaSim在遵循LRM方面更加严格。

参考文献IEEE Std 1800-2012

  • §8.10静态方法
  • §8.15超级
  • §8.24不加阻止的声明
票数 0
EN

Stack Overflow用户

发布于 2014-07-24 16:14:05

这是2012年SV标准在第8.10节静态方法中所述:

静态方法不能访问非静态成员(类属性或方法),但它可以直接访问静态类属性或调用同一类的静态方法。

您似乎试图访问不同类的静态方法,这与LRM的措辞背道而驰。如果foo_basefoo_class的基类,那么foo_class也包含foo_base_error(...)函数。尝试将其更改为:

代码语言:javascript
复制
function foo_class::error(string expression, string filename, int linenumber);
  foo_class::foo_base_error(expression, filename, linenumber);
endfunction

如果不是,那你就倒霉了。与QuestaSim相比,VCS对静态方法的解释似乎更为宽松。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24935691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档