где я могу включить библиотеку строк в мой заголовочный файл C ++ - PullRequest
4 голосов
/ 17 сентября 2011

Мой простой класс не будет компилироваться в Visual Studio.Это работало до того, как я добавил строковый член компании и метод getCo ().Я думаю, что мне нужно поместить куда-нибудь строковую стандартную библиотеку, но я не уверен, где.Есть идеи где?В моем заголовочном файле у меня есть:

#pragma once
#ifndef ENGINEER_H_
#define ENGINEER_H_

class engineer {
    int years;
    string company;
public:
    engineer(int years);
    ~engineer(void);
    int getYears();
    string getCo();
};

#endif ENGINEER_H_

И в моем файле CPP для определения класса у меня есть:

#include "StdAfx.h"
#include "engineer.h"

engineer::engineer(int y, string c){
    years = y;
    company = c;
}

engineer::~engineer(void) {
}

int engineer::getYears() {
    return years;
}

string engineer::getCo() {
    return company;
}

Ответы [ 2 ]

13 голосов
/ 17 сентября 2011

Поместите его в заголовочный файл и добавьте префикс вашего использования строки к пространству имен std.

Заголовок:

#include <string>

class engineer
{
   std::string company;
};

В файле реализации (.cpp) выможет иметь префикс имен или иметь директиву using.

Реализация:

using namespace std;  // using directive, no longer need to use std::

Избегать помещения директивы using в заголовочный файл, поскольку это загрязняет глобальное пространство имен и может привести кпроблемы с именами коллизий в других библиотеках, которые вы можете использовать.

2 голосов
/ 17 сентября 2011

Поместите его в заголовочный файл после включенных охранников:

#include <string>
using std::string;

Таким образом, он также будет доступен для вашего файла cpp, и вам не нужно будет включать его снова.

Кстати, #pragma once и #ifndef ENGINEER_H_ служат той же цели.Вы можете иметь только один из них.Код, сгенерированный VC, использует #pragma, который короче и не добавляет определения, поэтому я бы использовал это (без вреда, если вы оставите оба варианта).

...