9

出于某种原因,当我在程序中将变量定义为“uint”而不是“unsigned int”时,它会出错。这看起来很奇怪,因为 uint 的类型定义为:

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 的包含文件是 /usr/include/sys/types.h。

4

2 回答 2

7

我的猜测是系统中还有另一个 uint。尝试将您的重命名为不寻常的名称,或者更好地将其包装在名称空间中。

namespace MY {
    typedef unsigned int uint;
}

for (MY::uint i = 0; ....
于 2011-12-22T15:02:58.703 回答
-1

我的猜测是它试图形成某种“层次结构”。

换句话说,我们有:

typedef unsigned int size_t;
typedef unsigned int uint;

如果size_t它比泛型“更具体” unsigned int,那么防止它被转换为 是有意义的uint,这可能比任何旧的“更具体” unsigned int

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

于 2011-11-17T07:07:38.463 回答