C ++ не может создать вектор - PullRequest
1 голос
/ 28 июля 2010

Это странно.Я прекрасно создал вектор в одном классе, но не могу создать его в другом классе.Он представляет то, что у меня есть:

main.h

#include <Windows.h>
#include <ShellAPI.h>
#include <vector>
#include <string>
#include <iostream>

#include "taco.h"

class MyClass
{

public:
    int someint;
    vector<int> myOrder;
};

taco.h

#include <vector>

class OtherClass
{

public:
    vector<int> otherOrder;
};

И я получаю ошибки компиляции относительно объявления вектора в taco.h:

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'

Чего мне здесь не хватает?Я могу раскомментировать это второе объявление вектора, и оно прекрасно компилируется.

Ответы [ 4 ]

12 голосов
/ 28 июля 2010

Попробуйте:

std::vector<int> otherOrder;

vector является частью пространства имен std.Это означает, что всякий раз, когда вы используете vector в заголовочном файле, вы должны включать префикс std::.

Причина, по которой вы иногда можете забыть о том, что некоторые включенные файлы могут иметь using namespace std; в них, позволяя вам не указывать префикс.Однако вам следует избегать использования ключевого слова using в заголовочных файлах, поскольку оно будет загрязнять пространство имен любых файлов, которые include it.

Более подробное объяснение опасности using namespace ... см. эта тема .

3 голосов
/ 28 июля 2010

Все объекты стандартной библиотеки C ++ находятся в пространстве имен std.Попробуйте

class MyClass
{

public:
    int someint;
    std::vector<int> myOrder;
//  ^^^^^
};
3 голосов
/ 28 июля 2010

Попробуйте std::vector<int>. Вы должны использовать пространство имен --- я предполагаю, что у вас есть

using namespace std;

в main.h где-то. На SO много говорят о том, почему использование using является плохой практикой; Я бы порекомендовал вам проверить это.

1 голос
/ 28 июля 2010
std::vector<int> ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...