0

我试图从一个简单的程序中抽象出一个方法。此方法根据预先声明的 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;
        }
    }

运行这个 main.cpp 文件,其中包含头文件中的#include "arrayHelper.h"错误。string is not declared在头文件中包含字符串无效,但#include "arrayHelper.cpp"会导致重新定义方法。我应该如何解决这个问题?

4

3 回答 3

5

您应该#include <string>在标题中,并引用stringas std::string,因为using namespace std在头文件中是一个坏主意。其实这也是个.cpp主意

//arrayHelper.h
#ifndef ARRAYHELPER_H
#define ARRAYHELPER_H

#include <string>

void arrayLengthCheck(int & length, const int capacity, std::string prompt);

#endif // ARRAYHELPER_H
于 2013-02-05T00:30:15.250 回答
2

string在头文件中使用但找不到符号。

移至#include <string>arrayHelper.h全部替换stringstd::string

边注:

本地调用using namespace std;是惯用的方式,prompt通过引用传递可以省略一个副本。以下是对您的代码的略微增强:

数组助手.h

#ifndef ARRAYHELPER_H
#define ARRAYHELPER_H

#include <string>

void arrayLengthCheck(int & length, const int capacity, const std::string& prompt);

#endif // ARRAYHELPER_H

数组助手.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;
    }
}
于 2013-02-05T00:30:29.577 回答
0

你需要std::string在你的头文件中说...

于 2013-02-05T00:36:30.770 回答