【问题标题】:std lib objects as return types and function parametersstd lib 对象作为返回类型和函数参数
【发布时间】:2012-10-17 12:17:52
【问题描述】:

我是 C++ 新手,头文件定义类的想法对我来说很陌生。我有一个多项式类的以下头文件,它给了我很多错误。

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

class Polynomial {
public:
    Polynomial(std::vector <int>&);
    Polynomial(const Polynomial& orig);
    virtual ~Polynomial();

    std::vector <int> getCoeffs();
    Polynomial getIntegral(int, int, int);
    Polynomial getDerivative(int);
    std::string toString();

    void integrate(int, int);
    void derive();
private:
    std::vector<int> coeffs;
};

 #endif /* POLYNOMIAL_H */

在其返回类型定义中包含标准库中某些内容的所有类方法都会给我错误:命名空间“std”中的“向量”(或“字符串”)没有命名类型

将向量作为参数的构造函数也会给出错误:expected ')' before '

我确信这是非常明显的事情,但无论我所做的教程是什么,都没有深入到类和类定义来遇到这样的示例。

【问题讨论】:

  • 您需要包含适当的标头才能使用该类。

标签: c++ oop header-files std


【解决方案1】:

std::vector 定义在标题 vector 中。你需要添加语句

#include <vector>

在头文件的顶部。这会导致预处理器(有效地)粘贴该文件的内容来代替#include 语句。因此编译器知道你的类定义中std::vector 所指的类型。

这同样适用于std::string,它又在标题字符串中定义。因此,为该标题添加#include &lt;string&gt;

cppreference.com 是搜索类型及其各自标头的一个很好的参考;它也是一个很好的 C++ 在线参考资料。

你的头文件应该是这样的:

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <string>
#include <vector>

class Polynomial {
  ...
};

#endif /* POLYNOMIAL_H */

【讨论】:

  • 谢谢,我有时会混淆何时适合包含不同的内容;例如,为什么您通常不包含 cpp 文件但您包含头文件?
猜你喜欢
  • 2021-04-11
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多