简体   繁体   English

在C ++上编译时出错:未定义引用

[英]Error on compilation on c++ : Undefined reference to

I am trying to compile a C++ file in MPI but it is not working.It says: 我正在尝试在MPI中编译C ++文件,但是它不起作用,它说:

main.cpp:(.text+0x35d): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x384): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x3a5): undefined reference to `Complex::multiply(Complex*)'
main.cpp:(.text+0x3b7): undefined reference to `Complex::add(Complex*)'
main.cpp:(.text+0x3cf): undefined reference to `Complex::modul()'
/tmp/ccoIbWIN.o: In function `f2(int)':
main.cpp:(.text+0x53d): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x580): undefined reference to `Complex::Complex(double, double)'
main.cpp:(.text+0x5a1): undefined reference to `Complex::multiply(Complex*)'
main.cpp:(.text+0x5b3): undefined reference to `Complex::add(Complex*)'
main.cpp:(.text+0x5cb): undefined reference to `Complex::modul()'
collect2: ld returned 1 exit status

Here is Complex.h: 这是Complex.h:

#include <math.h>
#include <iostream>

using namespace std;

class Complex{
    public:
        Complex();
        Complex(double real,double imag);
        ~Complex();
        double real,imag;
        double modul();
        void multiply(Complex *t);
        void add(Complex *t);
        void toString();

};

Here is Complex.cpp: 这是Complex.cpp:

#include "Complex.h"

Complex::Complex(){
    this->real = 0;
    this->imag = 0;
}

Complex::Complex(double real,double imag){
    this->real = real;
    this->imag = imag;
}

Complex::~Complex(){}

double Complex::modul(){
    double realM = this->real*this->real;
    double imagM = this->imag*this->imag;
    return realM + imagM;
}

void Complex::multiply(Complex *t){
    this->real = this->real*t->real - this->imag*t->imag;
    this->imag = this->real*t->imag + this->imag*t->real;
}


void Complex::add(Complex *t){
    this->real = this->real + t->real;
    this->imag = this->imag + t->imag;
} 

And here is the main: 这是主要的:

#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include <fstream>
#include "mpi.h"
#include "Complex.h"

using namespace std;

int tip,MAX_STEPS,width,height,iteratie;
double x_min,x_max,y_min,y_max,rezolutie,julia1,julia2;
int thread,*matrice,*buffer;
int nr_linii,add_master;
int i = 0, j = 0;   

void f1(int rank){
    Complex *z,*c;
    for(double y = y_min; y < y_max; y += rezolutie){
        for(double x = x_min; x < x_max; x += rezolutie){
            z = new Complex(0,0);
            c = new Complex(x,y);
            iteratie = 0;
            while(z->modul() < 4 && iteratie < MAX_STEPS){              
                z->multiply(z);
                z->add(c);
                iteratie ++;
            }
        matrice[i*width + j] = iteratie % 256;
        j++;
         }
    j = 0;
    i ++;       
    if((i == nr_linii && rank != 0) || (i == height && rank == 0))
        break;
    }
}

void f2(int rank){
    Complex *z,*c;
    c = new Complex(julia1,julia2);
    for(double y = y_min; y < y_max; y += rezolutie){
        for(double x = x_min; x < x_max; x += rezolutie){
            z = new Complex(x,y);
            iteratie = 0;
            while(z->modul() < 4 && iteratie < MAX_STEPS){
                z->multiply(z);
                z->add(c);
                iteratie ++;
            }
        matrice[i*width + j] = iteratie % 256;
        j++;
        } 
    j = 0;
     if ((i == nr_linii && rank != 0) || (i == height && rank == 0))
                break;
        } 
}




int main(int argc,char *argv[]){
    //more code that doesn't depend on f1 or f2
    ......
    // here i want to use the function f1 or f2
    if(tip == 0){
        f1(rank);

    } else {
        f2(rank);
    }

 return 0;
}

Why it says "undefined reference to Complex:: ".What it is wrong? 为什么会说“未定义对Complex:的引用”。这是怎么回事? Can you help me?Thanks. 你能帮我吗?

You're not getting a compiler error, you're getting a linker error. 您没有遇到编译器错误,而出现了链接器错误。 Make sure that the complex.cpp output (usually complex.o ) can be found by the linker ( ld ). 确保链接器( ld )可以找到complex.cpp输出(通常为complex.o )。

You probably just need to ensure that complex.cpp is part of your compiler command line: 您可能只需要确保complex.cpp是编译器命令行的一部分:

mpic++ main.cpp complex.cpp -o main

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM