使用typedef'dint导致错误,而“unsigned int”不会...?

时间:2011-11-17 07:00:50

标签: c++ gcc typedef unsigned uint

出于某种原因,当我在程序中将变量定义为“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。

2 个答案:

答案 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

如果有的话,我希望这是一个警告,但不是错误......