我正在尝试链接几个目标文件,我得到3个未定义的函数错误引用。
inputtest.cpp
//test of input methods
#include <iostream>
#include <string>
#include <fstream>
#include <string>
#include <vector>
#include "Vector.h"
#include "Particle.h"
#include "read_particle_input.h"
#include "User_input.h"
#include "Particle_vector.h"
using namespace std;
using namespace berger_DEM;
int main() {
Particle_vector particles;
User_input input_data;
read_particle_input(particles, input_data);
cout <<endl<< particles.getpart(1).rho()<<endl<<particles.getpart(1).radius()<<endl;
return 0;
}
我将它与5个目标文件链接在一起,其名称在“.h”文件中找到(只是.o文件从同名的.cpp文件编译而来)。我收到的错误之一是
未定义引用'berger_DEM :: read_particle_input(berger_DEM :: Particle_vector&amp;,berger_DEM :: User_input&amp;)
请注意,此函数在read_particle_input.h中有一个原型,并在read_particle_input.o中实现。我还得到另外两个未定义的引用,但我相信它们是同一个问题,如果我能解决这个问题,同样的解决方案应该适用于这两个。
原型:
namespace berger_DEM
{
void read_particle_input(Particle_vector&,User_input&);
}
实现: //读入particle_input.dat的方法
void read_particle_input(Particle_vector & particles, User_input & input_data)
{
//define local variables
Vector velocity_in;
Vector position_in;
double radius_in;
double rho_in;
//open file and define file pointer
std::ifstream particle_input ("particle_input.dat");
//go through each line in particle_input.dat and define each particle
if (particle_input.is_open()) {
for(int i=0;i<input_data.num_particles();i++) {
//read one line from particle_input.dat
particle_input >> position_in;
particle_input >> radius_in;
particle_input >> rho_in;
particle_input >> velocity_in;
//set particle properties and position/velocity
particles.getpart(i).setrho(rho_in);
particles.getpart(i).setradius(radius_in);
particles.getpart(i).move(position_in);
particles.getpart(i).accelerate(velocity_in);
}
}
//close file
particle_input.close();
}
我一直在寻找那些遇到同样问题的人,但我找不到任何东西。 谢谢你的帮助。
答案 0 :(得分:3)
您的实现缺少类范围。
变化
void read_particle_input(Particle_vector & particles, User_input & input_data)
{
//define local variables
到
void berger_DEM::read_particle_input(Particle_vector & particles, User_input & input_data)
{
//define local variables
答案 1 :(得分:2)
在实现文件中,它应该被定义为,
void berger_DEM::read_particle_input(Particle_vector& particles, User_input& input_data);
{// ^^^^^^^^^^^ specify that 'read_particle_input' is part of the namespace
//...
}