错误C2440:'=':无法从'std :: string []'转换为'std :: string []'

时间:2010-06-13 06:44:38

标签: c++

现在这个代码出了什么问题!

部首:

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

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

};

实现:

#include "Menu.h"

string _choices[];

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

Menu::~Menu(void)
{
}

编译器抱怨:

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

没有转换!那是什么呢?

请帮助,只需传递一个血腥的字符串数组并将其设置为Menu类_choices []属性。

感谢

2 个答案:

答案 0 :(得分:7)

无法分配数组,无论如何您的数组都没有大小。您可能只想要一个std::vectorstd::vector<std::string>。这是一个动态的字符串数组,可以很好地分配。

// 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
}

答案 1 :(得分:0)

您无法将数组定义为string _choices[],它定义了一个大小未知的数组,这是非法的。

如果将其更改为string * _choices它会正常工作(但要注意它只会复制指向数组的指针,而不是全部克隆它)。

另外,您不希望_choices成为班级的一个字段,而不是全局字段吗?