打算重拾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
中的前幾行的順序修改如下:即可正常編譯運作。
辦法二(改):
把
MinimumPathSum.h
裡的vector
改成std::vector
;修改所有引用
MinimumPathSum.h
的地方,在引用這個頭檔前先引用<vector>
。即把兩個.cpp
中的前幾行的順序修改如下:更多介紹請參考這篇文章。
當然需要了,
.h
中的定義需要是已知的類型,除了指針可以直接聲明一下不用檢查都要有明確的定義你解決了這個錯誤那個錯誤自然沒有了