我正在尝试使用this tutorial中的代码构建自己的静态库(.lib)。但首先,静态库项目会自动为我生成 stdafx.h , targetver.h 和 stdafx.cpp ,所以我必须在所有源文件中包含stdafx.h。但是一旦我这样做,该项目仍然拒绝编译,因为现在它认为 YJMagic不是类或命名空间名称。然后我检查了项目的属性,发现stdafx.h已经是我的预编译头文件。也许它不会编译,因为存在双重包含问题?
然后因为我无法找到解决方案,我采用了另一种方式:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名更改为.lib,并配置类型到静态库(.lib)。(在属性 - > 配置属性 - > 一般),然后点击构建,aaaaa和它的工作原理!!!!我写了一个小的测试脚本,证明lib工作正常......所以我看到静态库项目错了吗?我想知道是否有人有同样的问题或有人可以解释?
对于那些不想打开tuto链接的人,源代码如下:
#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;
}
}
使用参考资料进行更新
答案 0 :(得分:1)
以下solution在VS 2017 C ++中为我工作:
这是编译器的一个令人讨厌的怪癖。当它搜索预编译的头时,它会跳过stdafx.h
之前的所有#includes。使其看起来像这样来解决您的问题:
#include "stdafx.h"
#include <iostream>
答案 1 :(得分:0)
作为不希望使用stdafx的解决方法:
删除有问题的包含,然后进入项目的属性。
在 C / C ++
下在预编译头文件下
将预编译头文件设置为不使用预编译头文件
这阻止了它寻找预编译的头文件,您可以继续生活:)