2015-12-11 187 views
-1

我收到了很多未定义的参考。我不知道我做错了什么。C++未定义的参考

,我发现了以下错误:

undefined reference to 'LetteroidField::start()' 
undefined reference to 'LetteroidField::setTitle(std::string)' 
undefined reference to 'Letteroid::setletter(char)' 
undefined reference to 'Letteroid::setLetter()' 
undefined reference to 'Letteroid::setCoords()' 
undefined reference to 'Letteroid::erase()' 

等letteroid引用。

我还没有完成其他类,但我不知道为什么我得到这些错误。我没有正确使用#include“”吗?

这是我的教授的示例代码。我联系了他,但他没有回答(它是一个在线课程)。


#include "letteroidfield.h" 
#include "letteroid.h" 
#include "blinkingletteroid.h" 
#include "jumpingletteroid.h" 
#include "movingletteroid.h" 
#include <stdlib.h>  /* srand, rand */ 
#include <time.h> 
/// include your derived classes here 


int main() 
{ 


    LetteroidField screen; 
    screen.start(); 
    screen.setTitle("Ken's example for the class, press 'x' to quit"); 


    BlinkingLetteroid one; 
    BlinkingLetteroid two; 
    BlinkingLetteroid three; 
    one.setLetter('!'); /// character 
    one.setCoords(5, 10); /// row, col 
    two.setLetter('h'); 
    two.setCoords(7, 9); 
    three.setLetter('@'); 
    three.setCoords(15, 57); 

    JumpingLetteroid four; 
    four.setLetter('j'); 
    four.setCoords(rand() % 21, rand() % 21); 

    MovingLetteroid five; 
    five.setLetter('m'); 

    int x = 20; 
    int y = 20; 
    while (x >= 1) 
    { 
     --x; 
    } 
    while (y >= 1) 
    { 
     --y; 
    } 

    if (x == 1) 
    { 
     x = 20; 
    } 
    if (y == 1) 
    { 
     x = 20; 
    } 
    five.setCoords(x,y); 


    /// create and initialize your letteroids here 

    while (screen.waitForKeyPress()) /// keep going until 'x' is pressed 
    { 
     one.blink(); 
     two.blink(); 
     three.blink(); 
     /// call the function that draws your letteroids here 

    } 


    screen.end(); 
    return 0; 
} 

#ifndef _LETTEROIDFIELD_H_ 
#define _LETTEROIDFIELD_H_ 

#include <string> 

class LetteroidField 
{ 
public: 
    void start();   /// start up the screen for letteroids 
    bool waitForKeyPress(); /// wait for any key to be pressed (return 
    void end();    /// shut down the screen and return it to  
    void setTitle(std::string); /// diplay the title 

}; 

#endif 



#ifndef _LETTEROID_H_ 
#define _LETTEROID_H_ 

class Letteroid 
{ 

public: 
    void setCoords(int, int);// set the position(down, across) 
    void setLetter(char); // set the character 
    int getX();    // get the position down 
    int getY();    // get the position across 
    void erase();   // erase the letteroid from the screen 
    void draw();    // draw the letteroid to the screen 

private: 
    int myX; 
    int myY; 
    char myLetter; 

}; 

#endif 

+0

您可以显示包括(或全班):旁边的标题”,那么你就需要通过至少增加包括他们在您的二进制以下到编辑命令提供你的LETTEROID课程?我认为问题在那里,你不包括课程的标题 – dasjkdj

回答

2

,你需要问自己的问题是:那些人在那里类中定义?

如果答案是:“在标题旁边提供的共享库(文件扩展名”.so“)中,则需要通过在编译命令中至少添加以下内容来链接它:

g++ main.cpp -L</path/to/library> -l<library_name> 

如果回答是:“在一个静态库(文件扩展名”,那么你就需要通过增加包括在您的二进制“旁边的标头中提供,AKA归档.a)中”至少以下到您的编译命令:

g++ main.cpp <library_name.a> 

如果答案是:“在一堆源文件中的的.cpp的

g++ main.cpp <source_file1.cpp> <source_file2.cpp> ...