转到定义失败 - Visual Studio 2008

8

我正在Visual Studio 2008中编写一款C++应用程序。在几个头文件中定义了很多结构体,例如:

#pragma pack( push , 1 )                // align on a 1-byte boundary

typedef struct myStruct_tag
{
    /* ... */
} myStruct_t;

#pragma pack( pop )                     // end 1-byte boundary alignment

在源文件中,这些定义的结构体被用作如下:
void MyFunc( void )
{
    myStruct_t * myStruct = NULL;

    myStruct = (myStruct_t *)malloc( sizeof(myStruct_t) );

    /* and so forth and so on... */
}

尽管它成功编译且没有错误和警告,但有时当我右键单击自定义数据类型(例如在MyFunc中)时会出现错误:

符号“myStruct_t”未定义。

然后我点击“确定”关闭对话框并按下Ctrl+Alt+F7重新构建解决方案。它能够构建而不产生任何错误或警告,因此我知道它在编译时找到了myStruct_t的定义,但是在我尝试使用“转到定义”功能时无法找到它。我唯一想到的是这个应用程序有很多定义的结构体,单字节对齐,但这不应该有影响。有人知道如何修复吗?
3个回答

10

尝试关闭您的解决方案,然后删除*.sdf文件。当您重新打开解决方案时,Intellisense将被强制重建其数据库,这可能会解决您的问题。

编辑:修复了指出的错误

编辑2:对于过时的版本,如果您使用的是Visual Studio 2008或更早版本,则应删除所有*.ncb文件。


在Visual Studio 2010中,没有*.ncb文件;现在使用*.sdf文件。 - Loghorn
我的错误。我正在使用VS2008。我会相应地更新OP。 - Jim Fell

1
  1. 终止Visual Studio进程。(在Visual Studio 2005中,当终止Visual Studio进程时,可能需要删除所有*.ncb文件。)
  2. 重新打开解决方案并清理解决方案:生成 -> 清理解决方案

在 Visual Studio 2005 中尝试此操作,删除了我的项目中的许多设置,包括包含目录、链接库等。 - VSB

0
对我来说,在Visual Studio 2005中唯一有效的方法是切换到Release,进行Rebuild Solution(由于Release项目尚未正确设置而失败),然后切换回Debug配置并进行Rebuild Solution。之后,“转到定义”功能又可以正常使用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接