问题描述
打算重拾C++,好久不写都忘了...请教各路大神,以下代码的问题出在哪?以下是头文件
#pragma onceclass 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.为什么上面的代码会提示不接受一个参数?
先谢谢各位大神了
问题解答
回答1:先说结论:关于头文件引用分两种习惯,一种是把所有用到的库都写在头文件里,另一种是把用到的库写在实现文件里。我个人倾向于前一种方式。
题主的问题是在编译时找不到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;
更多介绍请参考这篇文章。
回答2:当然需要了,.h中的定义需要是已知的类型,除了指针可以直接声明一下不用检查都要有明确的定义你解决了这个错误那个错误自然没有了