Systemc Ошибка с библиотекой

Я установил библиотеку SystemC 2.3.1, используя этот руководство.

Я написал этот пример Привет мир:

//hello.cpp
#include <systemc.h>

SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
}

void say_hello() {
cout << ”Hello World systemc-2.3.0.\n”;
}
};

int sc_main(int argc, char* argv[]) {
hello_world hello(“HELLO”);
hello.say_hello();
return(0);
}

и скомпилирован с этой командой:

export SYSTEMC_HOME=/usr/local/systemc230/
g++ -I. -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux -Wl,-rpath=$SYSTEMC_HOME/lib-linux -o hello hello.cpp -lsystemc -lm

Когда я компилировал код, я получил ошибку с библиотекой:

In file included from hello.cpp:1:0:
/usr/local/systemc230/include/systemc.h:118:16: error: ‘std::gets’ has not been declared
using std::gets;
^~~~

Как я могу решить это?

5

Решение

std::gets был удален в C ++ 11 (см. Что эквивалентно get () в C11?)

Если вы строите с использованием флага C ++ 11 (возможно, с псевдонимом g ++), вы должны отключить эту строку в systemc.h,

замещать

using std::gets;

с

#if defined(__cplusplus) && (__cplusplus < 201103L)
using std::gets;
#endif
10

Другие решения

Как упомянул guyguy333, в новых версиях g ++ является псевдонимом для C ++ 11.
так что добавление -std=c++98 решит проблему.
Команда компиляции может понравиться

$ g++ -std=c++98 -lsystemc -pthread main.cpp -o main
1

Вы, похоже, скопировали код с веб-страницы как есть. Пожалуйста, помните «» и «» — это не одно и то же. На линии 8

cout << ”Hello World systemc-2.3.0.\n”;

заменить его на

cout << "Hello World systemc-2.3.0.\n";

и на линии 13

hello_world hello(“HELLO”);

заменить его на

hello_world hello("HELLO");

И затем выполните код снова.
Удачи.

0