我声明了一个Algebra.h
文件,其中包含add()
函数的声明:
#ifndef Algebra_
#define Algebra_
namespace Algebra{
int add(int x, int y);
}
#endif
然后我将add()
实现为:
Algebra.cpp
#include "Algebra.h"
namespace Algebra{
int add(int x, int y){
return x+y;
}
}
然后我有A和B类,其中包括Algebra.h
:
B.h
#ifndef B_
#define B_
#include "Algebra.h"
#include <iostream>
class B{
public:
void func(int x, int y);
};
#endif
B.cpp
#include "B.h"
void B::func(int x, int y){
int val = Algebra::add(x,y);
std::cout << "B : "<< val << std::endl;
}
A.H
#ifndef A_
#define A_
#include <iostream>
#include "Algebra.h"
#include "B.h"
class A{
public:
void func(int x, int y);
};
#endif
A.cpp
#include "A.h"
void A::func(int x, int y){
int val = Algebra::add(x,y);
std::cout << "A : " << val << std::endl;
}
main.cpp
#include "A.h"
#include "B.h"
#include "Algebra.h"
int main(){
A a;
B b;
a.func(3,4);
b.func(3,4);
int val = Algebra::add(3,4);
std::cout << "main : " << val << std::endl;
}
我尝试使用
进行编译 g++ A.cpp B.cpp main.cpp -o bin
g++ A.cpp B.cpp Algebra.cpp main.cpp -o bin
我收到此错误:
/tmp/ccBXhev4.o:在函数'Algebra :: add(int,int)'中: main.cpp :(。text + 0x0):'Algebra :: add(int,int)'的多重定义 /tmp/ccfaCF5H.o:A.cpp:(.text+0x0):首先在这里定义collect2:错误: ld返回1退出状态
我甚至尝试在add()
中内联Algebra
函数,但仍然会收到错误。我也不想让代数成为一个班级。
为什么即使我添加了代数头文件,也会出现多重定义错误,而且它没有定义,只是声明了?