将const char数组赋值给char数组

时间:2014-05-28 02:58:49

标签: c++ arrays char cstring c-strings

所以我有一个类,Mail,有一个类数据成员,char类型[30];和static const char FIRST_CLASS [];在类定义之外我将FIRST_CLASS []初始化为" First Class"。

在我的默认Mail构造函数中,我想将类型设置为FIRST_CLASS [],但似乎无法找到一种方法。这是代码(有点剥离,所以不用你不需要的东西打扰你)

#include "stdafx.h"
#include <iostream>
#include <iomanip>   
#include <cstring>
#include <string>

using namespace std;
class Mail
{
public:
    Mail();
    Mail(const char* type, double perOunceCost, int weight);
    Mail(const Mail& other);

    ~Mail()
    { }

private:
    static const int TYPE_SIZE = 30;
    static const char FIRST_CLASS[];
    static const double FIXED_COST;
    static const int DEFAULT_WEIGHT = 1;

    char type[TYPE_SIZE];
    int weight;
    double perOunceCost;
};

const char Mail::FIRST_CLASS[] = "First Class";
const double Mail::FIXED_COST = 0.49;

// default
Mail::Mail()
{
    weight = DEFAULT_WEIGHT;
    perOunceCost = FIXED_COST;
    type = FIRST_CLASS;
}

以及这里的错误:

1   error C2440: '=' : cannot convert from 'const char [12]' to 'char [30]'
2   IntelliSense: expression must be a modifiable lvalue

2 个答案:

答案 0 :(得分:3)

您无法将一个阵列分配给另一个阵列。试试strcpy

 strcpy(type,FIRST_CLASS);

确保目标至少与一样大。

注意:如果不是强制性的,则应避免使用数组,并将std::string用于字符数组和其他STL容器(vectormap等。 )。

答案 1 :(得分:-1)

你得到的错误不是因为你试图将一个const char数组分配给一个char数组(但是 - 这将是一个错误)。您报告的错误是因为您尝试将大小为12的数组(&#34; First Class&#34;长度为12个字符)分配给大小为30的数组。您会得到相同的结果即使两个数组都是const或非const,也会出错。

由于这是C ++而不是C,正如其他人所建议的那样,你应该使用std :: string。以下是使用std :: string而不是char数组的示例。

#include <string>

using namespace std;
class Mail
{
public:
    Mail();
    Mail(string type_, double perOunceCost_, int weight_);

private:
    static const int TYPE_SIZE = 30;
    static const string FIRST_CLASS;
    static const double FIXED_COST;
    static const int DEFAULT_WEIGHT = 1;

    string type;
    int weight;
    double perOunceCost;
};

const string Mail::FIRST_CLASS("First Class");
const double Mail::FIXED_COST = 0.49;

// default
Mail::Mail()
{
    weight = DEFAULT_WEIGHT;
    perOunceCost = FIXED_COST;
    type = FIRST_CLASS;
}


Mail::Mail(string type_, double perOunceCost_, int weight_) :
    type(move(type_)),
    weight(weight_),
    perOunceCost(perOunceCost_)
{}