c++ - 无法用visual studio 2017编译静态库项目

标签 c++ include visual-studio-2017 static-libraries

我试图使用 this tutorial 中的代码构建我自己的静态库 (.lib) .但首先,静态库项目会自动为我生成一个stdafx.h,一个targetver.h和一个stdafx.cpp,所以我必须在所有源文件中包含 stdafx.h。但是一旦我这样做了,该项目仍然拒绝编译,因为现在它认为 YJMagic 不是类或命名空间名称。然后我检查了项目的属性,发现stdafx.h已经是我的预编译头文件了。所以也许它不会编译,因为存在双重包含问题?

然后因为想不出解决办法,我换了一种方式:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名更改为.lib,并将配置类型更改为static library(.lib).(在properties->configuration properties->general),然后点击build,aaaaa成功了!!!!我写了一个小的测试脚本来证明 lib 工作正常......所以我看到静态库项目错了吗?不知道有没有人遇到同样的问题或者谁能解释一下?

不想打开tuto链接的 friend ,源码在下面:

#pragma once

// YJMagic.h

namespace YJMagic
{
    class YJMagic
    {
    public:
        // Returns a + b
        static double Add(double a, double b);
    };
}


// YJMagic.cpp

#include "YJMagic.h"

#include <stdexcept>

using namespace std;

namespace YJMagic
{
    double YJMagic::Add(double a, double b)
    {
        return a + b;
    }
}

提前感谢您的回答!祝你有美好的一天;)

引用更新

最佳答案

以下solution在 VS 2017 C++ 中为我工作:
这是编译器的一个讨厌的怪癖。当它搜索预编译头文件时,它会跳过 stdafx.h 之前的所有 #includes。让它看起来像这样来解决你的问题:

#include "stdafx.h"
#include <iostream>

关于c++ - 无法用visual studio 2017编译静态库项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565257/

相关文章:

c++ - Visualization Toolkit - 如何读取和渲染多个对象?

c++ - 了解的限制?运算符(operator)

c# - Microsoft Bot Framework,缺少子类型

c# - 在 Visual-Studio 2017 中自动格式化 lambda 函数

c++ - Eclipse 将鼠标悬停在 C++ 中的变量 VS cout 上

c++ - 在 C++ 中打印带有扩展名的当前文件名

c++ - #include &lt;header.h>错误: Cannot open source file “header.h”

c - #include 比它出现在程序中更早

php - 在 &lt;iframe&gt; 和 <php include> 之间选择的常见做法是什么?

c++ - Visual Studio 2017 中的 UTF-8 支持 std::experimental::filesystem::path