Неопределенная ссылка на функцию, когда вся информация находится в заголовочном файле

Когда я пытаюсь скомпилировать следующий код, я получаю эту ошибку:

obj\Debug\main.o||In function `main':|
C:\Users\dmarr\Documents\CSharper\Dallas\CPlusPlus\WHYGODWHYCB\main.cpp|16|undefined reference to `bag::bag()'|
||=== Build finished: 1 errors, 0 warnings ===|

Сначала у меня были bag.h и bag.cpp как два отдельных файла — многие ответы, относящиеся к «Неопределенной ссылке», здесь предлагали переместить содержимое файла .cpp в файл .h — так я и сделал. Тем не менее, я все еще получаю вышеупомянутую ошибку при компиляции.

aItem.cpp:

//aItem .cpp implementation file
#include "aItem.h"#include <iostream>
#include <string>
#include <vector>
using namespace std;

//setting this up default
aItem::aItem()
{
m_itemName = "Default Name";
m_itemType = "Default Type";
m_damage     = 9001;
}
void aItem::setName(string name)
{
m_itemName = name;
}

void aItem::setType(string type)
{
m_itemType = type;
}

void aItem::setDamage(int damage)
{
m_damage = damage;
}

string aItem::getName()
{
return m_itemName;
}

string aItem::getType()
{
return m_itemType;
}

int aItem::getDamage()
{
return m_damage;
}

aItem.h:

#ifndef AITEM_H_INCLUDED
#define AITEM_H_INCLUDED

#include <iostream>
#include <string>
#include <vector>
using namespace std;class aItem
{
public:
//constructor
aItem();//Methods
void ItemCreate(string itemName, string itemType, int damage);
void setName(string name);
void setType(string type);
void setDamage(int damage);
string getName();
string getType();
int getDamage();

private:

string  m_itemName;
string  m_itemType;
int m_damage;};

#endif // AITEM_H_INCLUDED

bag.h:

#ifndef BAG_H_INCLUDED
#define BAG_H_INCLUDED

#include "aItem.h"#include <iostream>
#include <string>
#include <vector>
using namespace std;
class aItem;

class bag : public aItem
{
public:
//constructor
bag();

//methods
//void delItem(aItem aitem);

void addItem(aItem var)
{
m_items.push_back(var);
}

void bagList()
{
for( vector<aItem>::size_type index = 0; index < m_items.size(); index++ )
{
//Makes a numerical list.
cout << "Item " << index + 1 << ": " <<  m_items[index].m_itemName << endl;
index+= 1;
}
}
private:
vector<aItem> m_items;
};

#endif // BAG_H_INCLUDED

…и, наконец, main.cpp:

// WHYGODWHY.cpp : Defines the entry point for the console application.
//

#include "aItem.h"#include "bag.h"#include <iostream>
using namespace std;

int main()
{
aItem woodSword;
woodSword.setName("Wooden Sword");
woodSword.setDamage(3);
woodSword.setType("WPN");

bag inventory;
inventory.addItem(woodSword);
inventory.bagList();cout << "Name: " << woodSword.getName() << endl;
cout << "Type: " << woodSword.getType() << endl;
cout << "Damage: " << woodSword.getDamage() << endl;
//cout << "Inv: " <<
int pause = 0;
cout << "Pause!";
cin >> pause;

return 0;
}

1

Решение

//constructor
bag();

Вам не хватает определения вашего конструктора. Компилятор автоматически сгенерирует его, если вы не объявите его. Как только вы это сделаете, это ваш ответственность за обеспечение реализации.

Примечание: если вы это сделаете, вы, конечно, можете вернуться к разделению .h а также .cpp также.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector