Использование typedef'd uint вызывает ошибку, в то время как "unsigned int" не ...? - PullRequest
7 голосов
/ 17 ноября 2011

По какой-то причине, когда я определяю переменную как «uint» вместо «unsigned int» в моей программе, это приводит к ошибкам.Это кажется странным, потому что uint имеет typedef'd как:

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 - Если кто-то думает, что это может иметь значение, я использую gcc v4.1.2 на fedora 15 ... и включаемый файл, который определяет uint, является / usr / include / sys /types.h.

Ответы [ 2 ]

6 голосов
/ 22 декабря 2011

Я предполагаю, что в системе есть еще один uint. Попробуйте переименовать ваше имя во что-то необычное или, что еще лучше, оберните его в пространство имен.

namespace MY {
    typedef unsigned int uint;
}

for (MY::uint i = 0; ....
0 голосов
/ 17 ноября 2011

Я предполагаю, что он пытается сформировать какую-то "иерархию".

Другими словами, мы имеем:

typedef unsigned int size_t;
typedef unsigned int uint;

Если size_t "более конкретно"чем универсальный unsigned int, то имеет смысл не допустить его преобразования в uint, что может быть «более конкретным», чем любой старый unsigned int.

Я бы ожидал, что это будет предупреждениемесли что, правда, не ошибка ...

...