Je travaille sur ce sujet depuis un moment maintenant et je n'arrive pas à le comprendre. Je ne peux pas compiler le code car il continue à lancer l'erreur ci-dessous. Fondamentalement ce que Im essayant de faire est de créer un vecteur qui contient des objets d'une base et d'une classe dérivée en utilisant des pointeurs. Final Assignment.obj: erreur LNK2019: symbole externe non résolu "public: __thiscall Product :: Product (void)" (?? 0Produit @@ QAE @ XZ) référencé dans la fonction "public: __thiscall SaleProduct :: SaleProduct (char , classe std :: basic_string, classe std :: allocateur>, int, double, double) "(?? 0SaleProduct @@ QAE @ DV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocateur @ D @ 2 @@ std @@ HNN @ Z)
LNK1120 erreur fatale: 1 externals non résoluesErreur fatale VS2010 LNK1120: 1 externes non résolus
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <string>
using namespace std;
class Product
{
public:
Product();
Product(char iT,string des,int inv,double p,double dis)
{
invType = iT;
description = des;
inventory = inv;
price = p;
discount = dis;
}
char getInvType(){
return invType;
}
protected:
char invType ;
string description;
int inventory;
double price;
double discount;
};
class SaleProduct:public Product {
public:
//SaleProduct();
SaleProduct(char iT,string des,int inv,double p,double dis){
}
};
int main()
{
int choice = 0;
// SaleProduct* SaleProductOB;
// Product *productPoint = &ProductOB;
vector<Product*> inventoryVec;
char invType;
string description;
int inventory;
double price;
double discount = 0;
ifstream inFile("Inventory.txt");
if (inFile.is_open()){
while (inFile >> invType >> description >> inventory >> price >>discount){
if (invType == 'S'){
inventoryVec.push_back(new SaleProduct(invType,description,inventory,price,discount) );
}else{
//inventoryVec.push_back(new Product(invType,description,inventory,price,discount) );
}
}
}else{
cout << "File is not ready!";
}
cout << inventoryVec.size() << endl;
while (choice != 3) {
cout << "Please enter your choice:" << endl;
cout << "1. Print available items" << endl;
cout << "2. Add item to cart" << endl;
cout << "3. Print receipt and quit" << endl << endl;
cin >> choice;
}
//system("PAUSE");
return 0;
}
Si vous voulez vraiment que le constructeur par défaut du produit soit vide, faites-le; 'Product() {}'. –
Monsieur, vous êtes un génie! Savez-vous pourquoi un constructeur par défaut est nécessaire si j'ai déjà spécifié un constructeur? – Dre
Vous n'en avez pas besoin, je pense que vous essayez d'appeler le constructeur non par défaut de la classe de base, mais vous n'avez pas la syntaxe pour le faire. Voir la réponse de Mark ci-dessous pour savoir comment faire et vous pouvez supprimer le constructeur par défaut. –