c++ - 在.h头文件中用到vector需要写include<vector>语句吗?

查看:434
本文介绍了c++ - 在.h头文件中用到vector需要写include<vector>语句吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

打算重拾C++,好久不写都忘了...请教各路大神,以下代码的问题出在哪?
以下是头文件

#pragma once
class MinimumPathSum
{
public:
    MinimumPathSum();
    ~MinimumPathSum();
    int minPathSum(vector< vector<int> > &grid);
};

以下是.cpp文件

#include "stdafx.h"
#include "MinimumPathSum.h"
#include <vector>
#include <algorithm>

using namespace std;

MinimumPathSum::MinimumPathSum()
{
}


MinimumPathSum::~MinimumPathSum()
{
}

int MinimumPathSum::minPathSum(vector<vector<int> > &grid)
{
    // write your code here
    int f[1000][1000];
    if (grid.size() == 0 || grid[0].size() == 0)
        return 0;
    f[0][0] = grid[0][0];
    for (int i = 1; i < grid.size(); i++)
        f[i][0] = f[i - 1][0] + grid[i][0];
    for (int i = 1; i < grid[0].size(); i++)
        f[0][i] = f[0][i - 1] + grid[0][i];
    for (int i = 1; i < grid.size(); i++)
        for (int j = 1; j < grid[0].size(); j++)
            f[i][j] = min(f[i - 1][j], f[i][j - 1]) + grid[i][j];

    return f[grid.size() - 1][grid[0].size() - 1];
}

以下是测试算法的代码

// minimum-path-sum.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "MinimumPathSum.h"
#include <vector>
#include <iostream>

using namespace std;
int main()
{
    vector<vector<int> > v(3,vector<int>(3));
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3;j++)
        {
            v[i][j] = i*j;
        }
    }
    MinimumPathSum mps;
    int result=mps.minPathSum(v);
    cout << result << endl;
    return 0;
}

以下是错误信息

代码    说明
C2061    语法错误: 标识符vector
代码    说明
C2660    MinimumPathSum::minPathSum: 函数不接受 1 个参数
代码    说明
C2511    int MinimumPathSum::minPathSum(std::vector<std::vector<int,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>> &):MinimumPathSum中没有找到重载的成员函数

我的问题是:
1.在头文件中需要include语句吗?
2.为什么上面的代码会提示不接受一个参数?

先谢谢各位大神了

解决方案

先说结论:关于头文件引用分两种习惯,一种是把所有用到的库都写在头文件里,另一种是把用到的库写在实现文件里。我个人倾向于前一种方式。

题主的问题是在编译时找不到vector这个标识符,有两种解决办法:

办法一:

  • MinimumPathSum.h里加入#include <vector>

  • .h里的vector改成std::vector

办法二:

  • 修改所有引用MinimumPathSum.h的地方,在引用这个头文件前先引用<vector>。即把两个.cpp中的前几行的顺序修改如下:

    //#include "MinimumPathSum.h"    // <-- 下移
    #include <vector>
    #include <iostream>
     
    using namespace std;
    #include "MinimumPathSum.h"      // <-- 到这里

    即可正常编译运行。

办法二(改):

  • MinimumPathSum.h里的vector改成std::vector

  • 修改所有引用MinimumPathSum.h的地方,在引用这个头文件前先引用<vector>。即把两个.cpp中的前几行的顺序修改如下:

    //#include "MinimumPathSum.h"    // <-- 下移
    #include <vector>
    #include "MinimumPathSum.h"      // <-- 到这里
    #include <iostream>
    
    using namespace std;

更多介绍请参考这篇文章

这篇关于c++ - 在.h头文件中用到vector需要写include&lt;vector&gt;语句吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆