これは初心者の質問かもしれませんが、この問題は解決できません。前者と後者の問題を別々に解決することはできますが、同時に行うことはできません。文字列リテラルを関数に渡してメンバー変数に代入する
私は文字列メンバを持つクラスとそれを設定する関数を持っています。関数にリテラルを渡したい。
class Profiler
{
private:
std::string description;
//snip
public:
//snip
void startJob(const std::string &desc);
};
void Profiler::startJob(const string &desc) {
//snip
description = desc;
}
と私は(が実際に必要とする)場合は、このようにそれを使用するには:問題がある
profiler.startJob("2 preprocess: 1 cvConvertScale");
:
文字列リテラルを渡す方法関数に?私が見つけることができる答え:値渡し、またはconstポインタまたはconst参照渡し。私はそれが遅い(結局のところプロファイラで、マイクロ秒に正確です)ので、値渡ししたくありません。 Constポインタ/参照でコンパイラエラーが発生する(または何か間違っていますか)
メンバ関数に割り当てる方法は?私が見つけることができる唯一の解決策は、メンバー変数をポインタにすることです。それを非ポインタにすると、 "field 'description'の型に不完全なエラーが発生します(これは意味ですか?)。これをポインタとして持つことは、非constにconstを代入するので機能しません。 constポインタ/参照のみが動作するようです。
2つのこと:1.参照のためには、実際の変数が必要です。だから 'string arg =" 2前処理:1 cvConvertScale "; profiler.startJob(arg); '2.あなたはポインタを正しく割り当てていません。 'description = &desc; ' – chris