我想实现一个可以处理任意大数的类。我知道我可以使用像BigInteger这样的其他库,但我只想实现自己的实践。
我的标题文件:
#ifndef INT_H
#define INT_H
//#ifndef vector
#include <vector>
class Int{
private:
vector<int> v;
public:
Int();
Int(int);
void clear();
void push_back();
void resize();
vector<int>::iterator begin();
vector<int>::iterator end();
int size();
void sum(Int &, Int, Int);
void sub(Int &, Int, Int);
void prod(Int &, Int, Int);
Int operator+(const Int &);
Int operator-(const Int &);
Int operator*(const Int &);
Int operator>(Int &);
Int operator<(Int &);
Int operator>=(Int &);
Int operator<=(Int &);
int& operator[] (Int);
};
//#endif // vector
#endif // INT_H
问题是它在第9行第一次遇到vector时给出了一个错误,即“在'&lt;'之前预期的不合格ID标记“
非常感谢任何帮助。
编辑:使用include混淆定义。 现在我得到矢量没有命名类型
答案 0 :(得分:2)
来自#include <vector>
的vector
类型位于std
命名空间中;由于代码中未定义vector<int>
的显式类型,因此您需要执行以下操作之一来解决此问题:
vector<T>
的所有实例重命名为std::vector<T>
,其中T
是向量将包含的类型(在您的情况下为int
)。或
#include <vector>
后,您需要添加第using std::vector;
行。使用此using declaration,如果遇到不合格的vector
类型,则会使用std::vector
类型。请注意,由于此类是在标题中定义的,因此如果您使用选项2,那么在#include "Int.h"
的任何位置,您还会包含using std::vector;
声明。
您的代码的旁注:我不确定您的Int
类的完整意图是什么,特别是因为您的类提供类似于序列容器的成员函数,但不要忘记您的{ {3}}(例如Int& operator=(std::uint32_t i) ...
)。
希望可以提供帮助。