C++ でのポインターと参照の違いをよりよく理解しようとしています。Java のバックグラウンドを持っているので、C++ での参照も似ていると思っていました。ポインターからポインター演算を引いたものを期待していました。しかし、私は非常に失望し、時には混乱しました。少し読んだ後、参照はポインター演算のないポインターであり、NULLに設定できないことを理解したと思いました。学んだことをテストするために、コーディングを開始することにしました。しかし、この問題に遭遇し、コードがコンパイルされない理由がわかりません。
これが私が試していたものです:
3 void test(biNode*& bn)
4 {
5 string& s("another test");
6 bn = new biNode(s);
7 printf("Just Checking: %s\n", bn->getObject().c_str());
8 }
9
10 int main()
11 {
12 biNode* bn;
13 test(bn);
14 printf("Just Checking: %s\n", bn->getObject().c_str());
15 }
そして、これが私の「biNode」ヘッダーです。
1 #include <string>
2 #include <iostream>
3
4 using namespace std;
5
6 class biNode
7 {
8 public:
9 biNode(string& s);
10 string& getObject();
11 private:
12 string& obj;
13 };
対応する定義:
1 biNode::biNode(string& s) : obj(s)
2 {}
3 string& biNode::getObject()
4 {
5 return this->obj;
6 }
これをコンパイルしようとすると、次のエラーが発生します。
./test.cpp: In function `void test(biNode*&)':
./test.cpp:5: error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'const char*'
'string& s("another test");' の意味がわかりません。有効じゃない。誰でもこれを説明できますか?
前もって感謝します!