Это C ++, а не Java или C #. new
здесь не работает так же.
new
выражения возвращают указатели. Вы не можете назначить указатель на Graph
(т.е. Graph*
) на переменную типа Graph
:
Graph g;
g = new Graph(); // Graph = Graph* ? nope
Похоже, что компилятор пытается быть "полезным" и пытается использовать ваш конструктор, принимает аргумент int
для получения значения типа Graph
, но он не может преобразовать Graph*
в int
.
Когда вы пишете Graph g;
, у вас уже есть Graph
объект . Вам не нужно создавать один с new
. На самом деле, вы, вероятно, даже не хотите сделать это, поскольку это приведет к утечкам памяти .
Тогда есть эта строка:
char* path = "graph.csv";
"graph.csv"
имеет тип char const[10]
, поэтому вам не следует присваивать его char*
. В прошлом вы могли, но это оказалось плохой идеей. Эта функция была помечена как устаревшая, и теперь она была полностью удалена в C ++. Вместо этого вы можете:
- Сделать из него массив:
char path[] = "graph.csv";
;
- Сделать указатель на него с правильным типом:
char const* path = "graph.csv";
(это работает, потому что типы массивов распадаются на указатели );