繁体   English   中英

另一个 .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 Community 15 给了我 5 个不同的错误,C2065: 'string': undeclared identifier。 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类型是什么,并会抱怨它。

您可以通过以下任一方式解决此问题:

  1. #include "Aliohjelmat.h"按照包含的顺序向下移动到#include <string>using namespace std;移动using namespace std; 介于#include <string>#include "Aliohjelmat.h" 或者
  2. 添加#include <string>using namespace std; Aliohjelmat.h的顶部。

选项 2 是更简洁的方法,因为它允许您在任何其他 cpp 文件中使用 Aliohjelmat.h,而无需担心包含顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM