【问题标题】:C++ to C Conversion issues [duplicate]C++ 到 C 的转换问题 [重复]
【发布时间】:2018-06-10 23:59:15
【问题描述】:

我正在尝试将 C++(.cpp 文件)的内容复制到 C(.c 文件)代码,因为我需要对其进行转换。我得到的大多数错误现在都已修复,但还剩下一个。

这里是代码——我已经删除了所有与问题无关的东西:

/*Prototype*/
void breakTime(time_t time, tmElements_t tm);
/*Creation*/
static tmElements_t tm;
/*Functions*/
void breakTime(time_t timeInput,tmElements_t &tm){
    tm.Second = 10;
}

编译器给我的:

expected ';' , ',' or ')'  before '&' token

我尝试编辑函数并将 &tm 替换为 tm。它确实可以编译,但问题是函数内部分配给tm 的值。成员不会被转移到函数之外(这将是想法)。

任何建议如何解决这个问题?

【问题讨论】:

  • 你用的是什么编译器?
  • GCC(用于微处理器)
  • 你有没有试过找到tmElements_t &tm 代表什么?然后,您可以找出类似的 C 概念以使其工作。提示:en.cppreference.com/w/cpp/language/reference
  • C 没有引用; C++ 可以。您必须将引用转换为指针,然后也更改对函数的调用。当然在函数中使用适当的指针表示法。
  • @user2921077:不,您可以编译一个 C++ 翻译单元和另一个 C 翻译单元并将它们链接在一起。您将在您的 C++ 代码中使用 extern "C" 来声明您的 C 函数。这很常见(大多数 C++ 标准库实现都是以这种方式构建的)。更多信息请参见this answer

标签: c++ c


【解决方案1】:

& 符号在这里用于声明 tm 作为引用,但 C 没有引用。您必须删除指针的引用:

void breakTime(time_t timeInput, tm_Elements_t* tm) {
    tm->Second = 10;
}

您对breakTime 的调用也必须转换。你应该有这样的代码:

time_t timeInput;
tm_Elements_t tm;
breakTime(timeInput, tm);

必须变成:

time_t timeInput;
tm_Elements_t tm;
breakTime(timeInput, &tm);

注意这里&的使用有不同的含义:它用于获取tm的地址,该地址将作为指向breakTime的指针传递。

【讨论】:

  • 这行得通! :) 谢谢!
【解决方案2】:

只需用指针替换:

void breakTime(time_t timeInput, tmElements_t *tm) {
  tm->Second = 10;
}

【讨论】:

  • 并修复所有呼叫。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多