对具有相同参数的成员函数的未定义引用

时间:2013-10-27 19:04:23

标签: c++ linker-errors

在头文件“asteroid.h”中,我有结构'Asteroid'。在结构中,我声明了以下函数。

bool isCollidingWith (Asteroid a2);

在cpp文件“asteroid.cpp”中,我有以下代码

bool Asteroid::isCollidingWith (Asteroid a2)
{
    return true;
}

程序给我错误

  

未定义引用'Asteroid :: isCollidingWith(Asteroid)'

我试过从.cpp中删除“Asteroid ::”,但无济于事。在另一个.cpp中,主文件(collision.cpp,我无法编辑)调用“isCollidingWith”

if (a1.isCollidingWith(a2))

以上行是我的程序查明错误的地方。 collision.cpp #include“asteroid.h”,但不是asteroid.cpp。在asteroid.cpp中,我#include asteroid.h,所以我不认为我的包含是错误的。我在网上查看了“未定义引用”错误的常见原因,并且通常是由于.h文件中的参数和.cpp文件不同,但我的相同。有谁知道我能做些什么来解决这个问题?

编辑: 小行星cpp代码

#include "asteroid.h"
#include "point.h"
#include "line.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
new Asteroid asteroid1;
cout << "Program is running";
new Asteroid asteroid2;

string Asteroid::getInput (Asteroid a)
{
    cout << "whats the amount of vertices"
    double input;
    getline(cin, input);
    a.amountofpoints = input;
    input;
    double xinput;
    double yinput;
    cout << "input two numbers for the x and y of each vertice"
    while (input > 0)
    {
        getline(cin, input2);
        getline(cin, input3);
        a.vertice[input].x = input2;
        a.vertice[input].y = input3;
        input--;
    }
}
bool Asteroid::isCollidingWith (Asteroid a2) const
{
    //might need to take in Asteroid a2 to see if they're equal, not sure
    return true;
}
Point Asteroid::getCenter() const
{
    return a1;
}
double Asteroid::moveBy(double deltx, double delty) const
{
    return deltx;
    return delty;
}
void Asteroid::print() const
{
    cout << "Print Function" << endl;
    return a1;
}
Point Asteroid::addVertex(Point newvertex) const
{
    return newvertex;
}

asteroid.h的代码

#ifndef ASTEROID_H_INCLUDED
#define ASTEROID_H_INCLUDED
#include <iostream>
#include <string>
#include "point.h"
#include "line.h"
using namespace std;
struct Asteroid
{
    int amountofpoints;

    Point vertice;
    /**
    Create a line signment iwth the given endpoints.
    */
    bool isCollidingWith (Asteroid a2) const;
    Point getCenter () const;
    string getInput (Asteroid a);
    double moveBy (double deltx, double delty);
    std::ostream& print(std::ostream &out);
    Point addVertex(Point newvertex);
    //bool isCollidingWith;
};
#endif

我意识到我在cpp中的函数的“内部”基本上是空的;现在,我正试图让程序编译,以便我可以一次处理每个函数,但错误阻止了我。这是构建消息。

  

C:\ Users \ jclary \ Desktop \ adt_asteroids2 \ collision.cpp | 44 |未定义引用`Asteroid :: isCollidingWith(Asteroid)const'|

1 个答案:

答案 0 :(得分:0)

链接器必须查看所有源文件(* .cpp)才能生成可执行文件。因此,您必须以某种方式将所有文件名提供给链接器。究竟怎么样?这取决于您的平台。

如果您使用的是gcc:

g++ asteroid.cpp collision.cpp -o whatever

如果您使用的是MS Visual Studio:

  

将文件asteroid.cppcollision.cpp和所有标题文件放到“项目”或“解决方案”或其他任何名称上。

如果您使用其他系统,请在问题中指明,并且熟悉它的人会帮助您。