我试图更好地理解 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");' 无效。任何人都可以解释一下吗?
提前致谢!