Что-то не так с использованием векторов C ++ в структурах? - PullRequest
1 голос
/ 11 июля 2010

Хорошо, я перехожу с vb.net на c ++. Я пытаюсь использовать векторы в структуре, но компилятор кричит на меня за это. Что не так с текущим заявлением?

#include <vector>

struct FactorSet
{
 vector<long long> UpperFactor(0);
 vector<long long> LowerFactor(0);
};

Ошибка вывода (Visual Studio 2008):

Ошибка 1, ошибка C2059: синтаксическая ошибка: «константа»

Рискну предположить, что это мое непонимание того, что собой представляет вектор. На мой взгляд, это объект, хотя я думаю, что это называется шаблоном. Другие объекты, такие как строки, похоже, не имеют проблем. Я также предполагаю, что это распространяется и на определения классов, поскольку структуры и классы очень похожи.

Ответы [ 2 ]

6 голосов
/ 11 июля 2010

Вы хотите:

#include <vector>

struct FactorSet
{
 std::vector<long long> UpperFactor;
 std::vector<long long> LowerFactor;
};

, хотя у вас также могут быть проблемы с long long, поскольку в настоящее время он не является частью C ++.

Если вы действительно хотите задать размер для векторов, вам нужно сделать это через конструктор Structs:

struct FactorSet
{
 std::vector<long long> UpperFactor;
 std::vector<long long> LowerFactor;

 FactorSet() : UpperFactor(42), LowerFactor(42) {}
};

Так что теперь, когда вы говорите:

FactorSet f;

векторы в f будут иметь размер 42.

Что касается вектора на самом деле, это класс, очень похожий на строку, за исключением того, что в случае вектора вы должны сказать, что это за типсодержит.Так что

vector <char> s;

очень похож (но не идентичен) на:

string s;
2 голосов
/ 11 июля 2010

Да, вы можете использовать вектор в структуре или классе.Проблема заключается в том, что в C ++ вы не можете инициализировать элементы встроенными;вам нужно сделать инициализацию в конструкторе.Например: '

class FactorSet {
   public:
       FactorSet() : UpperFactor(0), LowerFactor(0) {}
       // ...
   private:
       std::vector<int64_t> UpperFactor;
       std::vector<int64_t> LowerFactor; 
};

Только некоторые комментарии ... вектор по умолчанию будет создан с нулевыми элементами, поэтому явно не нужно создавать его таким образом (на самом деле это может бытьнемного медленнее, чем просто использование конструктора по умолчанию).Кроме того, тип long long в настоящее время является нестандартным.Попробуйте использовать int64_t, определенный в stdint.h (и, что более точно, в заголовке boost/cstdint.hpp).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...