对class :: method的未定义引用

时间:2014-05-11 14:55:04

标签: c++ oop undefined-reference

在这些日子里,我想我会尝试通过将我的一个旧程序转换为一个可以在其他程序中使用的方法的对象来进行一些C ++面向对象编程。 该程序能够获取一个字符串数组并打印它们,以形成如下选择屏幕:

">东西"
" Stuff2"
" Stuff3"

然后可以使用键盘箭头移动光标,按Enter键可以选择一个条目 不幸的是,在删除了大多数错误之后,唯一的左边是对#class()""未定义的引用。对于我写的每种方法 代码如下:

Selection.cpp

#include "selection.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cstring>
#include <string>
#include <vector>
std::vector<entry> selectedArray;
int posizione = 1, tastoPremuto;    
void setCurrentArray(std::string selectionEntries[])
{
    //Copies a string array to a vector of struct entry
}

void resetSelection()
{
    //Blanks out every entry.segno
}

void selectionUpdate(int stato)
{
    //Moves the cursor
}

int getPosition()
{
    return posizione;  //Returns the position of the cursor
}

void setPosition(int nuovaPosizione)  //Sposta il puntatore alla nuovaPosizione
{
    posizione = nuovaPosizione;  //Sets the posiion of the cursor
}

entry getCurrentEntry(int posizioneCorrente)  //Returna l'entry della posizione attuale
{
    //Gets the name of the entry at which the cursor is
}

void printEntries()  //Stampa tutte le entries con la selezione
{
    //Prints all the entries with the cursor before them
}

int getSelection(bool needConfirm)
{
    //gets the selection from keyboard
}

Selection.h

#ifndef SELECTION_H
#define SELECTION_H
#include <string>
#include <vector>

struct entry
{
    std::string entryName;
    char sign;
};

class selection
{
   public:
    selection();
    virtual ~selection();
    void setCurrentArray(std::string selectionEntries[]);
    void resetSelection();
    int getPosition();
    void setPosition(int nuovaPosizione);
    entry getCurrentEntry(int posizioneCorrente);
    void printEntries(int argumentsNumber);
    int getSelection(bool needConfirm);
protected:
private:
    int tastoPremuto;
    int posizione;
    void selectionUpdate(bool stato);
    std::vector<entry> selectedArray;
};

#endif // SELECTION_H

的main.cpp

#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <selection.h>
#include <vector>
#include <array>

std::string selezioneTestArray[3] = {"Prima selezione", "Seconda selezione", "Terza seleazione"};

int main()
{
    selection sel;
    sel.setCurrentArray(selezioneTestArray);
    sel.setPosition(0);
    sel.resetSelection();
    sel.printEntries(3);
    sel.getSelection(true);
    return 0;
}

如果你需要整个代码,那就在我的Github中:https://github.com/LiceoFederici2H/Vita-Da-Lavoratore
对不起,如果它是意大利语,但我也打算将它用作学校项目 提前谢谢。

1 个答案:

答案 0 :(得分:1)

在源文件(Selection.cpp)中,您必须使用类名限定方法名称:

void Selection::setCurrentArray(std::string selectionEntries[])
{
  //Copies a string array to a vector of struct entry
}

否则这些方法将是自由函数,而不是类方法的定义。因此,您的类方法仍然是未定义,并且当链接器尝试与方法链接时,它无法找到它们,并显示未定义的方法引用错误。< / p>