Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在项目之间共享类,同时绕过stdafx.h依赖项_C++_Visual Studio_Code Sharing - Fatal编程技术网

C++ 在项目之间共享类,同时绕过stdafx.h依赖项

C++ 在项目之间共享类,同时绕过stdafx.h依赖项,c++,visual-studio,code-sharing,C++,Visual Studio,Code Sharing,我有一个VisualStudio2010解决方案,其中包含几个非常密切相关的项目。希望摆脱复制粘贴代码共享,在项目之间共享一些公共类。我们已经尝试将对类的引用从项目a添加到项目B中,但是在共享类引用错误的stdafx.h文件的情况下出现编译错误。请注意,两个项目的预编译头都处于启用状态(默认情况下) 我们还了解到,它是使用预处理器定义的文件 此时,我们的选项似乎是构建一个静态库项目或多个项目并引用项目a和B中的项目,或者尝试将正确的stdafx.h文件预构建事件复制到共享代码子文件夹中。第三种方

我有一个VisualStudio2010解决方案,其中包含几个非常密切相关的项目。希望摆脱复制粘贴代码共享,在项目之间共享一些公共类。我们已经尝试将对类的引用从项目a添加到项目B中,但是在共享类引用错误的stdafx.h文件的情况下出现编译错误。请注意,两个项目的预编译头都处于启用状态(默认情况下)

我们还了解到,它是使用预处理器定义的文件

此时,我们的选项似乎是构建一个静态库项目或多个项目并引用项目a和B中的项目,或者尝试将正确的stdafx.h文件预构建事件复制到共享代码子文件夹中。第三种方法是重新设计这两个项目,完全不使用stdafx.h


对我来说,所有这些选择似乎都太过分了。有没有一个更简单的解决方案是我遗漏的?

当我读到你的问题时,我脑海中闪现的两个问题是:

  • 关闭预编译头
  • 将公共代码编译为共享库
  • 在您的实例中,1可以让您更快地提高工作效率,但不要从项目中删除stdafx,因为这意味着必须遍历您的项目并关闭预编译头。只需删除您添加的所有内容,并将其保留为两个项目的默认值。我已经有一段时间没有这样做了,但我想我会右键单击并分别编译每个cpp文件。这将为您提供该编译单元缺少的头文件。添加它们,然后冲洗并重复每个步骤


    通过静态分析运行代码会突出一些可以加快编译速度的事情(forward声明vs includes,等等)。

    当我读到你的问题时,我脑海中闪现的两个问题是:

  • 关闭预编译头
  • 将公共代码编译为共享库
  • 在您的实例中,1可以让您更快地提高工作效率,但不要从项目中删除stdafx,因为这意味着必须遍历您的项目并关闭预编译头。只需删除您添加的所有内容,并将其保留为两个项目的默认值。我已经有一段时间没有这样做了,但我想我会右键单击并分别编译每个cpp文件。这将为您提供该编译单元缺少的头文件。添加它们,然后冲洗并重复每个步骤


    通过静态分析运行代码将突出显示可以加快编译速度的事情(向前声明vs包含,等等)。

    当我遇到这个问题时,我通过以下方法解决了它:

  • 重命名特定于其项目的所有stdafx.h文件(stdafx_prj_A.h、stdafx_prj_B.h等)。
    • 此外,您还需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性->C/C++->预编译头文件->预编译头文件中
    • 不要忘记为所有配置和平台设置此设置
    • 注意安全。每个StdAfx.cpp只需要包含正确的头文件。因此,不要在1 stdafx.cpp文件中包含所有stdafx头
  • 将项目之间共享的任何类移动到它们自己的项目中

  • 这仍然允许您使用PCH文件,并且您不必担心编译器使用错误的文件。如果我调用正确,VS将为您创建的任何新类使用当前指定的PCH文件名。

    当我遇到此问题时,我通过以下方法修复了它:

  • 重命名特定于其项目的所有stdafx.h文件(stdafx_prj_A.h、stdafx_prj_B.h等)。
    • 此外,您还需要更新每个解决方案以使用正确的预编译头文件。此设置位于配置属性->C/C++->预编译头文件->预编译头文件中
    • 不要忘记为所有配置和平台设置此设置
    • 注意安全。每个StdAfx.cpp只需要包含正确的头文件。因此,不要在1 stdafx.cpp文件中包含所有stdafx头
  • 将项目之间共享的任何类移动到它们自己的项目中

  • 这仍然允许您使用PCH文件,并且您不必担心编译器使用错误的文件。如果我没有记错,VS将为您创建的任何新类使用当前指定的PCH文件名。

    我们使用原始源创建
    .cxx
    文件,但
    除外,包括“stdafx.h”
    。这是实现该类的主文件

    然后,我们创建单独的特定于项目的
    .cpp
    文件,这些文件只包含(例如
    NumEdit.cpp


    然后,每个项目的
    debug
    release
    文件夹都有特定于项目的
    .obj
    文件。

    我们使用原始源创建
    .cxx
    文件,但
    除外,包括“stdafx.h”
    。这是实现该类的主文件

    然后,我们创建单独的特定于项目的
    .cpp
    文件,这些文件只包含(例如
    NumEdit.cpp


    然后,每个项目的
    debug
    release
    文件夹都有特定于项目的
    .obj
    文件。

    我认为,最好的选择确实是使用公共代码创建一个静态库,正如您已经发现的那样……一个解决方案是在构建时关闭预编译头。这将完全摆脱stdafx.h。您是否尝试创建一个新的筛选器,并在该筛选器中添加来自其他项目的类。这有助于明确其他项目类的来源,您可以将stdafx.h添加到该过滤器中。我认为,最好的选择确实是使用公共代码创建一个静态库,正如您已经发现的那样……一个解决方案是在禁用预编译头的情况下构建。这样就可以完全清除stdafx.h了。你有三个吗
    #include "stdafx.h"
    #include "\pathtoimplementation\NumEdit.cxx"