另一个.cpp文件中的函数

时间:2015-11-24 23:03:44

标签: c++ string function

好的,所以我一直在努力处理头文件并使我的功能正常工作。我有2个.cpp文件和一个头文件。

main.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;

}

Aliohjelmat.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:'string':未声明的标识符。 C3861'oppilas':找不到标识符,其他类似标识符。如果我只是将所有函数放在main.cpp中并忘记了其他两个文件,我可以得到这个工作,但我想让它们工作。当我尝试使用简单的int函数时,文件也正常工作。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在帖子中显示的函数签名是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;移到#include <string>#include "Aliohjelmat.h"之间;或
  2. #include <string>using namespace std;添加到Aliohjelmat.h的顶部。
  3. 选项2是更简洁的方法,因为它允许您在任何其他cpp文件中使用Aliohjelmat.h而无需担心包含顺序。

相关问题