【发布时间】:2009-12-29 09:59:38
【问题描述】:
我正在编写一个测试用例来解决我的应用程序中的一个更大的问题。我结束了在键盘上尝试了一些代码,发现在我的本地机器(g++ 4.4.1,带有-Wall)上编译的一些代码没有在键盘(g++ 4.1.2)上编译,即使我的本地机器有更新g++ 版本。
Codepad 将此称为对引用错误的引用,我对此进行了查找并发现了很少的信息。看起来拥有一个 stl 引用容器不是一个好主意。这是否意味着我需要定义自己的 PairPages 类?如果是这种情况,为什么它首先在本地编译?怎么回事?
键盘链接:http://codepad.org/UAaJI1rl
#include <deque>
#include <utility>
#include <iostream>
using namespace std;
class Page {
public:
Page() : number_(++count) {}
int getNum() const { return number_; }
private:
static int count;
int number_;
};
int Page::count = 0;
class Book {
public:
Book() : currPageIdx_(3) {
int numPages = 5;
while (numPages > 0) {
pages_.push_back(Page());
numPages--; // oops
}
}
pair<const Page&, const Page&> currPages() { return pagesAt(currPageIdx_); }
pair<const Page&, const Page&> pagesAt(int pageNo) { return make_pair(pages_[pageNo - 1], pages_[pageNo]); }
//const Page& currPages() { return pagesAt(currPageIdx_); }
//const Page& pagesAt(int pageNo);
private:
deque<Page> pages_;
int currPageIdx_;
};
int main() {
Book book;
cout << book.pagesAt(3).first.getNum() << endl;
cout << book.currPages().first.getNum() << endl;
}
【问题讨论】:
-
用指针代替引用?
标签: c++ reference g++ compiler-errors containers