2012-05-29 3 views
1

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; 
} 
+0

Si vous voulez vraiment que le constructeur par défaut du produit soit vide, faites-le; 'Product() {}'. –

+0

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

+0

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. –

Répondre

2

Vous devrez peut-être spécifier le constructeur correct (comme, il tente d'utiliser le constructeur par défaut, ce qui a pas de définition réelle):

SaleProduct(char iT,string des,int inv,double p,double dis) : 
    Product(iT, des, inv, p, dis){ 
+1

Je pense que je le sais savoir. Donc parce que la classe SaleProduct dérive de la classe Product, le constructeur SaleProduct essaie d'utiliser le constructeur du produit? – Dre

+0

@AndresRubalcava Oui, par défaut, il utilisera le constructeur par défaut (sans paramètre), ce qui est un moyen d'utiliser le constructeur par défaut pour construire la classe de base. –

+0

@Mark Wilkins && Joachim Isaksson Merci beaucoup à vous deux pour votre aide. Je vais faire un peu plus de lecture sur les constructeurs. – Dre

Questions connexes