【问题标题】:Function to write to file works in .cpp file, but not in .h file写入文件的函数在 .cpp 文件中有效,但在 .h 文件中无效
【发布时间】:2014-08-09 07:34:26
【问题描述】:

我需要在.txt 文件上写入和读取一些文本,使用fprintffscanffopen 作为主要功能。

我将它们全部收集在单个头文件中的单个 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 中。 我也使用“w”模式而不是“w+”模式打开文件。 这样做,程序可以完美运行! 谢谢大家:)

【问题讨论】:

  • 你在哪里使用fscanf
  • 对我来说这看起来像纯 C
  • 你有编译错误信息吗?您的代码存在严重问题。
  • 上帝,关于 i。顺便说一句,编译没有问题。
  • 你为controlloprimocaso 变量传递了什么值?您必须将其传递给 0 才能打印任何内容。你通过了 0 分吗?

标签: c text file-io


【解决方案1】:

这可能很愚蠢,但是您确定您的代码中包含了 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);
    }
}

注意我需要被声明

【讨论】:

  • 如果我真的像你说的那样,它告诉我我正在重新定义 scrivi_valori 函数。
  • 你用g++编译?
  • 请复制并粘贴我的代码,并为您的 .h 文件提供相同的名称,然后使用普通的 g++ 进行编译。如果遇到错误,请在此处复制错误。它应该可以完美运行
  • 完美运行,但我的编译器重新定义了 scrivi_valori 函数
  • 最后它的工作与否? ant macfij 建议的方法是正确的方法
【解决方案2】:

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

// 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() 函数,您只需包含一个头文件,预处理器会将您的函数定义粘贴到您包含该头文件的文件中。

【讨论】:

  • 我将所有函数移到了一个头文件中,我将所有声明的函数移到了 cpp 文件中,我只在主 cpp 中包含了头文件并且...不起作用。它给了我错误“未定义的引用..”所有其他函数
  • 您还应该在所有 cpp 文件中包含该单个头文件。如果来自scrivi_valori() 的错误消失了,试试吧,它应该可以工作。
【解决方案3】:

您不能将程序的源代码写入头文件 (.h)。 您可以在源文件 (.cpp) 中编写源代码。 在 C++ 中有扩展名 .hpp。 .hpp 文件可以像标题一样包含,但仍可能包含源代码。 .hpp 文件就像是头文件和源文件之间的折衷方案。,

【讨论】:

  • 我会尽快尝试.hpp,谢谢。如果我将源代码保留在 .h 文件中会怎样?
  • 这种情况下不会执行源代码。这是如果您已经知道它没有在头文件中执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2011-03-15
  • 2011-06-21
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多