在另一个.cpp文件中的函数
Functions in another .cpp file
好的,所以我一直在努力处理头文件并使我的函数正常工作。我有 2 个.cpp文件和一个头文件。
主.cpp:
#include "Aliohjelmat.h"
#include <iostream>
#include <string>
using namespace std;
const unsigned int MAX_LKM = 40; //globaali vakio
int main() {
string Opiskelija[MAX_LKM]; //Määritetään tarvittavat taulukot
int HarjMaara[MAX_LKM];
float Arvosana[MAX_LKM];
int laskuri = 0;
int toiminto = 0;
cout << "Valitse toiminto:" << endl << "1.Lisaa uusi opiskelija";
cin >> toiminto;
switch (toiminto) {
case '1':
oppilas(Opiskelija, HarjMaara, Arvosana, laskuri);
laskuri++;
break;
default:
cout << "Valitse oikea toiminto";
break;
}
return EXIT_SUCCESS;
}
阿利奥杰尔马特.cpp
#include "Aliohjelmat.h"
#include <iostream>
#include <string>
using namespace std;
void oppilas(string nimet[], int Tehtavat[], float Arvosanat[],int& laskuri){
cout << "Opiskelija nimi: ";
cin >> nimet[laskuri];
cout << "Tehdyt tehtavat (max. 40): ";
cin >> Tehtavat[laskuri];
cout << "Harjoitustyon arvosana: ";
cin >> Arvosanat[laskuri];
return;
}
和头文件Aliohjelmat.h
void oppilas(string nimet[], int Tehtavat[], float Arvosanat[], int& laskuri);
我的 VS 社区 15 给了我 5 个不同的错误,C2065:"字符串":未声明的标识符。C3861 'oppilas':找不到标识符,以及其他类似的标识符。如果我只是将所有功能放在 main 中.cpp并且忘记了其他 2 个文件,我可以完成这项工作,但我想让它们工作。此外,当我使用简单的 int 函数尝试它们时,这些文件工作正常。
非常感谢任何帮助,谢谢!
如果您在帖子中显示的函数签名是 Aliohjelmat.h 的全部内容,那么您会看到此错误,因为编译器在到达那里时不知道string
是什么。
使用Aliohjelmat.cpp完成预处理器后,它看起来像这样:
// expanded contents of Aliohjelmat.h:
void oppilas(string nimet[], int Tehtavat[], float Arvosanat[], int& laskuri);
// [expanded contents of iostream will be here]
// [expanded contents of string will be here]
using namespace std;
void oppilas(string nimet[], int Tehtavat[], float Arvosanat[],int& laskuri){
cout << "Opiskelija nimi: ";
cin >> nimet[laskuri];
cout << "Tehdyt tehtavat (max. 40): ";
cin >> Tehtavat[laskuri];
cout << "Harjoitustyon arvosana: ";
cin >> Arvosanat[laskuri];
return;
}
如您所见,函数oppilas()
是在 <string>
的内容之前声明的,因此编译器当时不知道string
类型是什么并抱怨它。
您可以通过以下任一方式解决此问题:
- 将
#include "Aliohjelmat.h"
按包含在#include <string>
之后的顺序向下移动,并将using namespace std;
移动到#include <string>
和#include "Aliohjelmat.h"
之间;或 - 将
#include <string>
和using namespace std;
添加到Aliohjelmat.h
的顶部。
选项 2 是更干净的方法,因为它允许您在任何其他 cpp 文件中使用 Aliohjelmat.h,而不必担心包含顺序。
相关文章:
- 用C++在单独的头文件中完成函数体
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 头文件、宏和内联函数c++
- 如何使用单独文件中的派生类访问友元函数对象
- C++无法定义虚拟函数 OUTER 类和头文件
- 回溯C++不打印函数,因此文件
- 如何从另一个文件继承私有成员变量和公共函数
- 从函数角度看ID到文件路径的内部与外部映射
- 区分非成员函数和头文件中的成员函数
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 如何在其他文件中使用函数
- 整数键映射到头文件中的成员函数指针
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 用"=default"声明的函数应该只在头文件中执行
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- C++ - 在一个函数/文件中初始化变量然后在main()/另一个文件中使用它的最佳方法是什么?
- C++单独的函数文件
- 只对单个函数/文件启用编译器优化