【发布时间】:2011-08-04 20:05:33
【问题描述】:
当我尝试使用多个文件时,我在编译一个函数时遇到了一个奇怪的问题。我把它归结为这个简单的例子:假设我想找到一个整数向量的总和。如果我尝试编译以下代码,它会按预期工作:
#include <vector>
#include <iostream>
using namespace std;
int VectorSum (const vector<int>& values)
{
int S = 0;
for (int t=0; t < values.size(); t++)
{
S += values[t];
}
return S;
}
int main()
{
vector<int> values;
values.push_back(-100);
values.push_back(75);
values.push_back(75);
cout << "Total = " << VectorSum(values) << endl << endl;
cin.ignore(1, '\n');
return 0;
}
但是,如果我尝试使用头文件,它会崩溃(在 Windows XP 的 VS 2010 上编译时出现错误 C4430)。这是另一种方法的代码:
标题:
/* VectorSum.h */
#pragma once
#include <vector>
int VectorSum (const vector<int>& values);
来源:
/* VectorSum.cpp */
#include "VectorSum.h"
#include <vector>
int VectorSum (const vector<int>& values)
{
int S = 0;
for (int t=0; t < values.size(); t++)
{
S += values[t];
}
return S;
}
实施:
/* Main.cpp */
#include "VectorSum.h"
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> values;
values.push_back(-100);
values.push_back(75);
values.push_back(75);
cout << "Total = " << VectorSum(values) << endl << endl;
cin.ignore(1, '\n');
return 0;
}
如您所见,VectorSum.cpp 中的函数代码与我的第一个 .cpp 文件中的代码相同,因此问题一定出在头文件中。任何想法我做错了什么?
【问题讨论】:
-
你应该使用
std::accumulate (values.begin (), values.end (), 0);... -
我很确定这不是导致错误的原因,但如果您在 .h 中包含
,则无需在包含该 .cpp 的 .cpp 中再次包含它。 H。你可以这样试试吗? -
@CCC C4430 是编译错误,不是吗?请输入完整的错误文本并告诉我们错误在哪一行。
-
Armen 获胜。谢谢大家!
标签: c++ function vector header definition