所以我有一个类,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
答案 0 :(得分:3)
您无法将一个阵列分配给另一个阵列。试试strcpy
strcpy(type,FIRST_CLASS);
确保目标至少与源一样大。
注意:如果不是强制性的,则应避免使用数组,并将std::string
用于字符数组和其他STL容器(vector
,map
等。 )。
答案 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_)
{}