我想最近开始为一个开源C++项目做贡献.我只有很少的C++经验,我选择Visual Studio作为IDE,用SP1更新.我得到了相对容易构建的解决方案,并希望稍微导航一下代码以获得概述.
这是我注意到有时"转到定义"/"转到声明"不起作用.当我右键单击源代码中的符号时,这两个选项都可用,但是当我在头文件中时,"转到定义"只会让我再次接受有关那些函数的声明.当我在.cc文件中时,我总是被带到同一个文件中的定义.
关于这个涉及的功能,我注意到的更多事情是:
1)对于某些功能,我可以从头文件导航到定义,但另一个方向被破坏
2)如果声明被更改为完全匹配定义,则可以修复某些函数的导航,例如
header declaration:
void buche(sint64 betrag, player_cost type);
source definition:
void karte_t::buche(sint64 const betrag, player_cost const type)
Run Code Online (Sandbox Code Playgroud)
改成
header declaration:
void buche(sint64 const betrag, player_cost const type);
Run Code Online (Sandbox Code Playgroud)
- >导航在两个方向都有效
3)当点击源文件中相关功能的代码块时,顶部的范围菜单变为"(全局范围)"而不是向右显示小箭头(这是前向声明的符号I想?)和类名(但那些函数肯定是类成员)
我搜索了很多,这似乎是一个相对众所周知的问题.网站上有一个主题:如何让IntelliSense在Visual Studio 2008中可靠地运行
我还在Microsoft论坛上发现了几个主题(我无法链接,因为我只允许发布两个超链接),但没有正式确认错误或其他内容.
我发现回复的精髓是应该删除.ncb文件(已经被VS2010中的.sdf数据库取代,据我所知),或者在加载解决方案时使用该选项重建数据库.我多次做了所有这些,无济于事.Stackoverflow上线程上评价最高的回复似乎暗示这只是一个错误(Intellisense的错误 - 我是否正确,这是自动完成组件,它还负责代码导航?)一个人必须接受,建议相反,使用Visual Assist,然后问题是关于VS2008然后一个回复指向VS2010改进.另一个回复归咎于递归引用,但我认为 - 这不是这个项目中的问题,因为所有文件(当然是那些我已经检查并遇到问题的文件)都包含了警卫.该项目的一位编码员也向我证实他有同样的问题.但我不是那么热衷于在Visual Assist上花钱,这只是一个小小的爱好......
在Eclipse/Java方面有很多经验,对我来说这样一个相对重要的功能无法可靠地工作似乎很奇怪.当然,我可以理解静态代码分析对于C++而言比对Java要困难得多.但话说回来,Visual Studio是一个商业产品,它有很多开发周期.
总结这篇文章,这是一个不可避免的错误吗?
我正在尝试使用类型安全方法EntityGraph.addAttributeNodes(Attribute<T, ?> ... attribute)来构建我的实体图。我有一个@MappedSuperclass基本上如下所示的类型层次结构:
@MappedSuperclass
public abstract class BaseEntity
{
@Id
private int dbid;
}
@Entity
public class Entity extends BaseEntity
{
private String someAttribute;
}
Run Code Online (Sandbox Code Playgroud)
EclipseLink 创建了这个元模型:
@Generated(value="EclipseLink-2.5.2.v20140319-rNA", date="2015-08-07T10:46:31")
@StaticMetamodel(BaseEntity.class)
public abstract class BaseEntity_ {
public static volatile SingularAttribute<BaseEntity, Integer> dbid;
}
@Generated(value="EclipseLink-2.5.2.v20140319-rNA", date="2015-08-07T10:46:31")
@StaticMetamodel(Entity.class)
public class Entity_ extends BaseEntity_ {
public static volatile SingularAttribute<Entity, String> someAttribute;
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法dbid使用实体图 API引用属性:
EntityGraph<Entity> graph = em.createEntityGraph( Entity.class );
graph.addAttributeNodes( Entity_.dbid ); // does not compile: …Run Code Online (Sandbox Code Playgroud)