Cabeçalhos C ++ redefinindo / declarando mixup

Eu estou tentando abstrair um método de um programa simples. Esse método testa o tamanho de uma matriz em relação a uma constante CAPACITY pré-declarada e gera uma mensagem de erro se as condições não forem atendidas. No entanto, estou tendo problemas para criar um arquivo de header com um arquivo .cpp para manter o método.

o arquivo de header:

//arrayHelper.h #ifndef ARRAYHELPER_H #define ARRAYHELPER_H void arrayLengthCheck(int & length, const int capacity, string prompt); #endif // ARRAYHELPER_H 

o arquivo de código:

  //arrayHelper.cpp #include  #include  #include "arrayHelper.h" using namespace std; void arrayLengthCheck(int & length, const int capacity, string prompt) { // If given length for array is larger than specified capacity... while (length > capacity) { // ...clear the input buffer of errors... cin.clear(); // ...ignore all inputs in the buffer up to the next newline char... cin.ignore(INT_MAX, '\n'); // ...display helpful error message and accept a new set of inputs cout << "List length must be less than " << capacity << ".\n" <> length; } } 

Executando este arquivo main.cpp que contém erros #include "arrayHelper.h" que string is not declared no arquivo de header. Incluir cadeia no ficheiro de header não tem efeito, mas #include "arrayHelper.cpp" resulta numa redefinição do método. Como devo abordar esse problema?

Você deve #include no header, e se referir a string como std::string , já que using namespace std seria uma má idéia em um arquivo de header. Na verdade, é uma má idéia no .cpp também .

 //arrayHelper.h #ifndef ARRAYHELPER_H #define ARRAYHELPER_H #include  void arrayLengthCheck(int & length, const int capacity, std::string prompt); #endif // ARRAYHELPER_H 

string é usado no arquivo de header, mas não consegue encontrar o símbolo.

Mova #include para arrayHelper.h substitua toda a string por std::string

Nota:

chamar using namespace std; localmente é o modo idiomático, e o prompt passagem por referência pode elidir uma cópia. Abaixo está um pequeno aprimoramento para o seu código:

arrayHelper.h

 #ifndef ARRAYHELPER_H #define ARRAYHELPER_H #include  void arrayLengthCheck(int & length, const int capacity, const std::string& prompt); #endif // ARRAYHELPER_H 

arrayHelper.cpp

 #include  #include "arrayHelper.h" void arrayLengthCheck(int & length, const int capacity, const std::string& prompt) { using namespace std; // If given length for array is larger than specified capacity... while (length > capacity) { // ...clear the input buffer of errors... cin.clear(); // ...ignore all inputs in the buffer up to the next newline char... cin.ignore(INT_MAX, '\n'); // ...display helpful error message and accept a new set of inputs cout << "List length must be less than " << capacity << ".\n" << prompt; cin >> length; } } 

Você precisa dizer std::string no seu arquivo de header …