我在这里读过你必须包含.h文件而不是.cpp文件,因为否则会出错.所以举个例子
main.cpp中
#include <iostream>
#include "foop.h"
int main(int argc, char *argv[])
{
int x=42;
std::cout << x <<std::endl;
std::cout << foo(x) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
foop.h
#ifndef FOOP_H
#define FOOP_H
int foo(int a);
#endif
Run Code Online (Sandbox Code Playgroud)
foop.cpp
int foo(int a){
return ++a;
}
Run Code Online (Sandbox Code Playgroud)
作品,但如果我更换#include "foop.h"与#include "foop.cpp"我得到一个错误(使用开发C++ 4.9.9.2,Windows中):
multiple definition of foo(int)
first defined here
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我知道你应该在arduino安装目录的"libraries"文件夹下放置任何外部库,但我有一个项目,它使用我为项目创建的几个库,主要是为了保持所有代码自包含和出来主要的pde文件.但是,我试图将库放在与主PDE文件相同的目录中,以便我可以更容易地将所有内容保存在subversion中(我在多台计算机上处理这个)并且我不想继续返回并分别同步库.此外,只是为了能够轻松拉链草图文件夹,并知道它包含它需要的一切.
我已经尝试将标题文件添加到草图中作为新选项卡,但这似乎根本不起作用...甚至不关心它们是否应该在arduino IDE中.
我也尝试将库添加到子目录中的sketch目录(我更喜欢),然后链接到它们:
#include "mylib/mylib.h"
Run Code Online (Sandbox Code Playgroud)
和
#include <mylib/mylib.h>
Run Code Online (Sandbox Code Playgroud)
但这两个都导致文件未找到错误.
这可能吗?如果是这样,我如何将它们包含在主文件中进行构建?最好在他们自己的子目录中.
快速的问题.
我试图让C++固定下来,今天我花了几个小时的双定义链接器错误("这已经定义了!")我终于意识到这是因为我有这样的布局:
main.cpp中
#include Dog.cpp
Run Code Online (Sandbox Code Playgroud)Dog.cpp
#include Dog.h
Run Code Online (Sandbox Code Playgroud)Dog.h
// (Dog class and prototype of test function)
Run Code Online (Sandbox Code Playgroud)现在我通过在main.cpp中包含Dog.h而不是Dog.cpp来清除它.
通过包含.h文件,具有相同前缀的.cpp文件是否可以用程序编译?
当程序只包含.h并且没有任何对Dog.cpp的引用时,我感到震惊.我花了很多年的谷歌搜索,但没有答案真的帮助我理解发生了什么.
编辑:我忘了添加我在.h中的原型,并在.cpp中为类定义了函数,这就是给出了"已定义"错误的原因.