出于某种原因,当我在程序中将变量定义为“uint”而不是“unsigned int”时,它会出错。这看起来很奇怪,因为uint的typedef为:
typedef unsigned int uint;
...所以我认为我可以互换使用这两者。更确切地说,我正在分配一个函数的结果,该函数将“unsigned int”返回到一个uint变量中 在向量调整大小调用中使用该uint ...此时它出错。即,我的代码看起来像这样:
unsigned int getUInt()
{
return 3;
}
int main(void) {
vector<vector<float> > vectVect(100000);
for(uint i = 0; i < vectVect.size(); ++i)
{
vector<float>& myVect = vectVect[i];
uint myUnsignedInt = getUInt();
myVect.resize(myUnsignedInt);
}
cout << "finished" << endl;
}
...它出错的行是myVect.resize行。
显然,我已经有了一个解决方案,但我想了解为什么会发生这种情况,因为我非常困惑。有人有什么想法吗?
PS - 如果有人认为它可能很重要,我在Fedora 15上使用gcc v4.1.2 ...而定义uint的include文件是/usr/include/sys/types.h。答案 0 :(得分:6)
我的猜测是系统中还有另一个uint。尝试将您的内容重命名为不寻常的内容,甚至更好地将其包装在命名空间中。
namespace MY {
typedef unsigned int uint;
}
for (MY::uint i = 0; ....
答案 1 :(得分:-1)
我的猜测是,它试图形成某种“等级”。
换句话说,我们有:
typedef unsigned int size_t;
typedef unsigned int uint;
如果size_t
比通用unsigned int
“更具体”,则有必要防止它转换为uint
,这可能比任何旧版本“更具体” unsigned int
。
如果有的话,我希望这是一个警告,但不是错误......