写入文件的函数在.cpp文件中工作,但不在.h文件中

时间:2014-08-09 07:34:26

标签: c text file-io

我需要使用.txtfprintffscanf作为主要功能,在fopen文件上撰写和阅读一些文字。

我将它们全部收集在单个头文件中的单个void函数中。此函数应在txt文件上读写。

这是代码:

void scrivi_valori(int variabili[], int num_variabili, int controlloprimocaso){
    FILE * testo;
    testo = fopen ("risultati.txt","w+");
    if(controlloprimocaso==0){
        fprintf(testo, "%d-", 1);
        for(i=0;i<num_variabili;i++){
            fprintf(testo, "%d.", variabili[i]);
        }
        fprintf(testo, "-%d\n", 1);
        fclose(testo);
    }
}

但它不起作用,risultati.txt完全是空白。真正的问题是我将代码移到了.cpp文件中并且工作正常,risultati.txt写得非常完美。

所以我的问题是:为什么此功能在.cpp文件中有效且它不在.h文件中?

谢谢大家,但我解决了:) 我把我的标题中的所有函数放在一个file.h中。 我也使用&#34; w&#34;打开文件。模式而不是&#34; w +&#34;模式。 这样做程序完美无缺! 谢谢大家:)

3 个答案:

答案 0 :(得分:0)

这可能是愚蠢的,但是,你确定你在代码中包含了a.h吗? 我的意思是你有:     #include“a.h” 在您使用或未使用的.cpp代码中? 因为它至少对我有用。

这对我有用: .cpp文件:

#include <stdio.h>
#include <cstdlib>
#include "header.h"

main()
{
    int test[2];
    test[0]= 3;
    test[1]=6;
    scrivi_valori(test,2,0);
    return 0;
}

和header.h文件

void scrivi_valori(int variabili[], int num_variabili, int controlloprimocaso)
{
    FILE * testo;
    testo = fopen ("risultati.txt","w+");
    if(controlloprimocaso==0)
   {
        fprintf(testo, "%d-", 1);
        for(int i=0;i<num_variabili;i++)
        {
            fprintf(testo, "%d.", variabili[i]);
        }
        fprintf(testo, "-%d\n", 1);
        fclose(testo);
    }
}

请注意我需要声明

答案 1 :(得分:0)

你的做法是错误的。在头文件中,您应该只存储函数的声明,源文件是定义函数的地方。所以,你的头文件应该是:

// your_func.h
void scrivi_valori(int variabili[], int num_variabili, int controlloprimocaso);

和源文件:

// your_func.cpp
#include "your_hunc.h"
void scrivi_valori(int variabili[], int num_variabili, int controlloprimocaso)
{
    FILE * testo;
    testo = fopen ("risultati.txt","w+");
    if(controlloprimocaso==0)
    {
        fprintf(testo, "%d-", 1);
        for(int i=0;i<num_variabili;i++)
        {
            fprintf(testo, "%d.", variabili[i]);
        }
        fprintf(testo, "-%d\n", 1);
        fclose(testo);
    }
}

然后,如果你需要在其他cpp文件中使用scrivi_valori()函数,你只需要包含一个头文件,预处理器会将你的函数定义粘贴到包含该头文件的文件中。

答案 2 :(得分:0)

您无法在头文件(.h)中编写程序的源代码。 您只需在源文件(.cpp)中编写源代码即可。 在C ++中有扩展名.hpp。 .hpp文件可以像标题一样包含在内,但仍然可能包含源代码。 .hpp文件就像是头文件和源文件之间的折衷。