我正在尝试从一个简单的程序中抽象出一个方法。此方法针对预先声明的CAPACITY常量测试数组的长度,并在不满足条件时发出错误消息。但是,我在创建带有.cpp文件的头文件时无法保存该方法。
头文件:
//arrayHelper.h
#ifndef ARRAYHELPER_H
#define ARRAYHELPER_H
void arrayLengthCheck(int & length, const int capacity, string prompt);
#endif // ARRAYHELPER_H
代码文件:
//arrayHelper.cpp
#include <iostream>
#include <string>
#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" << prompt;
cin >> length;
}
}
在头文件中运行包含#include "arrayHelper.h"
错误的main.cpp文件。{1}}。在头文件中包含字符串无效,但string is not declared
会导致重新定义方法。我该如何处理这个问题?
答案 0 :(得分:5)
您应该在标头中#include <string>
,并将string
称为std::string
,因为using namespace std
在头文件中不是一个好主意。实际上它是bad idea in the .cpp
too。
//arrayHelper.h
#ifndef ARRAYHELPER_H
#define ARRAYHELPER_H
#include <string>
void arrayLengthCheck(int & length, const int capacity, std::string prompt);
#endif // ARRAYHELPER_H
答案 1 :(得分:2)
string
用于头文件,但无法找到符号。
将#include <string>
移至arrayHelper.h
并将所有string
替换为std::string
旁注:
本地调用using namespace std;
是惯用的方式,通过引用传递prompt
可以省略一个副本。以下是对您的代码的略微增强:
arrayHelper.h
#ifndef ARRAYHELPER_H
#define ARRAYHELPER_H
#include <string>
void arrayLengthCheck(int & length, const int capacity, const std::string& prompt);
#endif // ARRAYHELPER_H
arrayHelper.cpp
#include <iostream>
#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;
}
}
答案 2 :(得分:0)
您需要在头文件中说std::string
...