1

文字列を取得して文字配列に変換し、プライベート変数に保存する新しいクラスを作成したいと考えています。その内容を変更できるようにしたいのでconst char*、変換しようとしています。char*

class MyClass {
public:
    MyClass (const char* input) {
        // convert input to char* and assign it to carray
    }
private:
    char carray[];
};

int main() {
    MyClass mc = "StackOverflow";
}

コンストラクターがさまざまな方法 ( 、 など) で引数を取る方法を変更しましたstring& inputinput.c_str()、それらはすべて以下のいずれかのエラーで失敗しました。

error: conversion from ‘const char [14]’ to non-scalar type ‘MyClass’ requested

error: request for member ‘c_str’ in ‘s’, which is of non-class type ‘const char*’

error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

error: incompatible types in assignment of ‘const char*’ to ‘char [0]’

SOでいくつかの例を見ましたが、まだわかりませんでした。これどうやってするの?

4

1 に答える 1

10

すべきではありません-元が実際constに である場合、その内容を変更すると未定義の動作が発生します。

std::string代わりにaを使用します。

class MyClass {
public:
    MyClass (const std::string& input) : carray(input){
    }
private:
    std::string carray;
};

一般に、この種の問題に取り組むときは、 を取り除くことさえ考えずに、そもそもなぜconstが存在するのかを考えて、そこから問題に取り組む必要があります。const

于 2013-06-25T16:02:05.070 に答える