无法编译带有visual studio 2017 的静态库项目

Can't compile the static library project with visual studio 2017

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

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

不想打开link教程的朋友,源码在下面:

#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>

作为您不想使用 stdafx 时的解决方法:

删除有问题的包含,然后进入项目的属性。

C/C++

预编译Headers

预编译Header设置为不使用预编译Header

这会阻止它寻找预编译的 header,您可以继续您的生活 :)