【问题标题】:How to use typedef in function?如何在函数中使用 typedef?
【发布时间】:2017-11-24 16:39:10
【问题描述】:

我正在编写 Quicksort 以对包含不同数据类型(结构)的二进制文件进行排序。这是我到目前为止写的:

void quicksort(){
    int izbor;
    char naziv_datoteke[20];
    cout << "Izaberite datoteku koju zelite sortirati: "<<endl;
    cout << "1 - sifra.ind "<<endl;
    cout << "2 - ime.ind "<<endl;
    cout << "3 - prezime.ind "<<endl;
    cin >>izbor;
    switch(izbor){
        case 1:strcpy(naziv_datoteke, "sifra.ind");
            typedef tsifra slog;
            break;
        case 2:strcpy(naziv_datoteke, "ime.ind");
            typedef time slog;
            break;
        case 3:strcpy(naziv_datoteke, "prezime.ind");
            typedef tprezime slog;
            break;
    }

    int broj_zapisa;
    dat.open(naziv_datoteke, ios::in|ios::out|ios::binary);
    dat.seekg(0, ios::end);
    broj_zapisa=dat.tellg()/sizeof(slog);
    //  quicksort(0, broj_zapisa-1);
    dat.close();
}

我收到此错误:

冲突声明'typedef struct time slog'

我想将 slog 定义为存储在文件中的数据类型,以便以后可以使用它来获取该结构的大小和其他一些东西。

【问题讨论】:

  • C++ 不能以这种方式工作。 typedef 定义了一个别名,其范围从定义开始,一直持续到其封闭范围的末尾。您不会“重新定义” typedef,而且它不是某种从那时起生效的可执行语句。使用模板、继承或各种其他设计模式,有许多不同的方法可以完成您尝试做的事情的基本想法。我建议您继续阅读您的 C++ 书籍以了解有关这些主题的所有内容,以便确定最适合您的情况。
  • ^那,请在switch 之后显示您想要使用slog 实现的目标。

标签: c++ struct typedef quicksort binaryfiles


【解决方案1】:

谈到山姆提到的内容:请查看this 答案和this 页面以获取有关该主题的更多信息。希望它们能帮助您了解全局。

直接回答您的问题:在运行时将 slog 定义为数据类型会很麻烦。更多详情here

您想要的一个快速解决方案是定义一个结构 slog,它可以为您保存不同的信息,如下所示:

struct slog()
{
    int my_val_int = -1;
    char* my_val_char = "";
}

一旦需要返回值,您只需通过检查 my_val_int 是否与您的默认值不同或 char 是否不为空来检查实际设置的值。

请注意,这是一种非常快速且肮脏的方式。请仅将其作为起点来发展您自己的程序结构想法,以便它以精简和卑鄙的方式工作! :-)

祝你好运!

【讨论】:

  • 谢谢。有没有更简单的方法可以让函数处理不同的数据类型?
  • 是的!我会在一秒钟内为你记下一个快速的解决方案。不过,我再次敦促您查看上述链接。
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多