C ++如何将代码拆分成多个文件?

时间:2013-11-09 14:43:49

标签: c++

我想将我的大程序拆分成多个文件... 也许只有一个结构, 然后读取csv文件并提取单词并将它们放入数组中的函数.. 然后另一个函数用bubblesort对数组进行排序, 最后我把所有东西放在一起的主要功能...... 事情就是这样,我在main函数的开头声明了必要的变量,当我想分离函数时,我在main函数中声明的变量以及我用于那些函数的变量都不再被发现了...我是必须再次将它们作为参数传递给函数?或者有另一种/更好的方法吗?我可以声明extern或static变量吗?

其次,我不知道何时制作.h文件或其他.cpp文件,如果是另一个.cpp文件,则不允许其他主要功能正确,我该怎么办呢?申报公共课?

这是我要分开的代码:

#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
//#include "studentStruct.h"

using namespace std;    


struct Stud{
        long matrnr;
        char vorname[30];
        char name[30];
        char datum[30];
        float note;
    };


void bubbleSort(Stud mystud[], int studentCounter);             


int main(int argc, char **argv)
{   

    const int MAX = 30;
    Stud stud;  
    Stud mystud[30]; // <<-- Array of "Stud" type
    //memset((void*)mystud,0,sizeof(mystud) * sizeof(Stud));
    int wordCounter(0);
    int i(0); //thats the charCounter or index
    int studentCounter(0);
    char wort[MAX];



  FILE * pFile;
  int cnr(0);     

  pFile=fopen("studentendaten.txt","r");  
  if (pFile==nullptr) 
  {
      perror ("Fehler beim öffnen der Datei");
  }

  else
  {       
    while (cnr != EOF) 
    {       
        (cnr=fgetc(pFile)) ;    

        if ((char)cnr == '\n') {
            mystud[studentCounter] = stud;
            studentCounter++;                       
            continue;           
        }

        if ((char)cnr == ';') { 


            wort[i] = '\0'; 

            switch (wordCounter % 5) {

                case 0:             
                stud.matrnr = atol(wort);
                break;

                case 1:
                strcpy(stud.name, wort);
                break;

                case 2:
                strcpy(stud.vorname, wort);
                break;

                case 3:
                strcpy(stud.datum,wort);
                break;

                case 4:
                stud.note = atof(wort); 
                break;
            }           

            wordCounter++;          
            i = 0;
            continue;
        }

        wort[i] = (char)cnr;
        i++;                

    }   

    mystud[studentCounter] = stud;
    fclose (pFile);
}


    bubbleSort(mystud , studentCounter);

    for (int i(0) ; i <= studentCounter; i++) {
    //cout <<mystud[i].matrnr << "  |  " << mystud[i].name << " |  " << mystud[i].vorname <<"  |  " 
    //<< mystud[i].datum <<"  |  " << mystud[i].note << endl;
    printf("%ld %15s    %15s    %15s    %6.1f\n",mystud[i].matrnr,mystud[i].name,mystud[i].vorname,mystud[i].datum,mystud[i].note);  
    }

    return 0;
}

void bubbleSort(Stud mystud[], int studentCounter) {
    Stud tmp;   
    for (int i = 0 ; i<= studentCounter; ++i) {
        for (int j=0; j<= studentCounter-1;  ++j) {
            if (mystud[j].note > mystud[j+1].note) 
            {
                /**
                tmp = mystud[j+1];
                mystud[j+1] = mystud[j];
                mystud[j] = tmp;
                **/

                    tmp.matrnr = mystud[j+1].matrnr;
                    strcpy(tmp.vorname,mystud[j+1].vorname);
                    strcpy(tmp.name,mystud[j+1].name);
                    strcpy(tmp.datum , mystud[j+1].datum);
                    tmp.note = mystud[j+1].note;

                    mystud[j+1].matrnr = mystud[j].matrnr;
                    strcpy(mystud[j+1].vorname ,mystud[j].vorname);                 
                    strcpy(mystud[j+1].name , mystud[j].name);
                    strcpy(mystud[j+1].datum ,mystud[j].datum);
                    mystud[j+1].note = mystud[j].note;

                    mystud[j].matrnr = tmp.matrnr;
                    strcpy(mystud[j].vorname , tmp.vorname);
                    strcpy(mystud[j].name , tmp.name);
                    strcpy(mystud[j].datum , tmp.datum);
                    mystud[j].note = tmp.note;


                }           
            }
        }       
    }

2 个答案:

答案 0 :(得分:2)

最好(和标准)的事情可能是:

  1. 写一个类Stud,而不是一个结构(该类的私有成员将是namevorname等。)
  2. 制作一个头文件,您可以在其中编写具有所有函数原型的类的定义
  3. 在单独的.cpp文件中定义这些功能
  4. 最后,您只需为实现(main)创建另一个.cpp文件。
  5. 当然,您需要在.cpp文件中包含头文件。

答案 1 :(得分:0)

  • 标题文件说 - 我们可以这样做。
  • .cpp文件说 - 这就是我们这样做的方式 - 即。将它编译成一个对象。

.cpp文件使用头文件来了解可用的内容。

编译.cpp文件。生成目标文件。将它们连接在一起,这样可以解决松散的问题。砰 - 有可执行文件。