2010-06-13 11 views
3

maintenant quel est le problème avec ce code!erreur C2440: '=': impossible de convertir 'std :: string []' en 'std :: string []'

tête:

#pragma once 
#include <string> 
using namespace std; 

class Menu 
{ 
public: 
    Menu(string []); 
    ~Menu(void); 

}; 

Mise en œuvre:

#include "Menu.h" 

string _choices[]; 

Menu::Menu(string items[]) 
{ 
    _choices = items; 
} 

Menu::~Menu(void) 
{ 
} 
compilateur

se plaint:

error C2440: '=' : cannot convert from 'std::string []' to 'std::string []' 
There are no conversions to array types, although there are conversions to references or pointers to arrays 

il n'y a pas de conversion! Alors, de quoi s'agit-il? S'il vous plaît aidez, juste besoin de passer un tableau sanglant de chaînes et le définir à l'attribut Menu _choices [] de menu.

grâce

Répondre

7

Tableau de ne peuvent pas être affectés, et vos tableaux ont pas la taille de toute façon. Vous voulez probablement juste un std::vector: std::vector<std::string>. Ceci est un tableau dynamique de chaînes, et peut être affecté très bien.

// Menu.h 
#include <string> 
#include <vector> 

// **Never** use `using namespace` in a header, 
// and rarely in a source file. 

class Menu 
{ 
public: 
    Menu(const std::vector<std::string>& items); // pass by const-reference 

    // do not define and implement an empty 
    // destructor, let the compiler do it 
}; 

// Menu.cpp 
#include "Menu.h" 

// what's with the global? should this be a member? 
std::vector<std::string> _choices; 

Menu::Menu(const std::vector<std::string>& items) 
{ 
    _choices = items; // copies each element 
} 
+0

Merci GMan qui était vraiment instructif et travaillé bien sûr. J'ai également déménagé _choices pour devenir membre. acclamations – Bach

0

Vous ne pouvez pas définir le tableau comme string _choices[], qui définit un tableau de taille inconnue, ce qui est illégal.

Si vous le modifiez en string * _choices cela fonctionnera très bien (sachez cependant qu'il ne copiera qu'un pointeur vers le tableau, et ne le clonera pas tout).

Aussi, ne voulez-vous pas _choices être un champ de la classe, au lieu d'un global?

+0

Les tableaux namespace-scope ne sont pas alloués sur la pile. –

+0

@Johannes: mon mauvais - fixe. – Oak

Questions connexes