이것은 초보자 질문 일 수 있지만이 문제를 해결할 수 없습니다. 전 또는 후자의 문제를 개별적으로 해결할 수는 있지만 동시에 해결할 수는 없습니다.함수에 문자열 리터럴 전달 및 멤버 변수에 할당
문자열 멤버가있는 클래스와이를 설정하는 함수가 있습니다. 함수에 리터럴을 전달하려고합니다.
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 포인터/참조가 컴파일러 오류를 내고 있습니까? (또는 내가 잘못하고있는 것이 있습니까?)
어떻게 멤버 함수에 할당합니까? 내가 찾을 수있는 유일한 해결책은 멤버 변수를 포인터로 만드는 것입니다. 비 - 포인터로 만들면 "필드 '설명에'불완전한 유형이 있습니다. '라는 오류가 표시됩니다 (이 의미는?). 그것을 const가 아닌 const에 할당하기 때문에 포인터로 사용하는 것은 효과가 없습니다. const 포인터/참조 만 작동하는 것 같습니다.
#include <string> class Profiler { private: std::string description; //snip public: //snip void startJob(const std::string &desc); }; void Profiler::startJob(const string &desc) { //snip description = desc; }
값으로 저장하는 오케이이다
두 가지 : 1. 참조를 위해 실제 변수가 필요합니다. 따라서'string arg = "2 전처리 : 1 cvConvertScale"; profiler.startJob (arg);'2. 포인터를 올바르게 지정하지 않았습니다. 'description = &desc; ' – chris