首页 > STL编程 > cannot appear in a constant-expression

cannot appear in a constant-expression

又是一个错误提示。今天在用GCC编译代码时出现了这个错误,全部提示如下:

$ g++ -o a.out readstr3.cpp -Wall
readstr3.cpp: In function 'int main()':
readstr3.cpp:54:29: error: 'start' cannot appear in a constant-expression
readstr3.cpp:54:36: error: 'next' cannot appear in a constant-expression

当然,后面还有一堆STL惯有的复杂错误提示,实在看不懂。那就好好研究这个吧。网上找了很多,好像也解决不了问题。忘了贴源代码了……

//Coded by 代码疯子
//http://www.programlife.net/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdio>
using namespace std;

struct strtab_cmp
{
	typedef vector<char>::iterator strtab_iterator;
	bool operator()(const pair<strtab_iterator, strtab_iterator>& x,
					const pair<strtab_iterator, strtab_iterator>& y) const
	{
		return lexicographical_compare(x.first, x.second, y.first, y.second);
	}
};

struct strtab_print
{
	ostream& out;
	strtab_print(ostream& os) : out(os) {}
	
	typedef vector<char>::iterator strtab_iterator;
	void operator()(const pair<strtab_iterator, strtab_iterator>& s) const
	{
		copy(s.first, s.second, ostream_iterator<char>(out));
	}
};

int main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	
	vector<char> strtab;
	char c;
	
	while(cin.get(c))
	{
		strtab.push_back(c);
	}
	
	typedef vector<char>::iterator strtab_iterator;
	vector<pair<strtab_iterator, strtab_iterator> > lines;
	strtab_iterator start = strtab.begin();
	while(start != strtab.end())
	{
		strtab_iterator next = find(start, strtab.end(), '\n');
		if(next != strtab.end())
		{
			++next;
		}
		lines.push_back(make_pair<start, next>);//错误代码所在行
		start = next;
	}
	
	sort(lines.begin(), lines.end(), strtab_cmp());
	
	for_each(lines.begin(), lines.end(), strtab_print(cout));
	
	return 0;
}

其实,只看错误的代码就行了,第54行处。脑残了很久,实在不知道错在哪里。后来仔细瞧了瞧make_pair函数,猛然发现,圆括号写成尖括号了……很无语,做个留念。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> cannot appear in a constant-expression
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: STL编程 标签: , , ,
  1. 2010年10月23日00:46 | #1

    博名如博呀真是个代码疯子

    [回复]

    代码疯子 回复:

    自己写的代码 贴上来做个备份 也留给需要这些代码的朋友

    [回复]

  2. 2010年10月23日09:18 | #2

    第一次来,支持了~~

    [回复]

    代码疯子 回复:

    谢谢支持 去你的博客看了看 感觉很不错

    [回复]

  3. 2010年10月24日09:20 | #3

    嗯,支持一下先,呵呵

    [回复]

    代码疯子 回复:

    O(∩_∩)O~

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.