gpt4 book ai didi

c++ - 使用 g++ 编译主模块的奇怪错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:53 25 4
gpt4 key购买 nike

我正在尝试使用“g++ main.cpp -c”编译以下代码,但它给了我这个奇怪的错误……有什么想法吗?

main.cpp: In function ‘int main()’:
main.cpp:9:17: error: invalid conversion from ‘Graph*’ to ‘int’
main.cpp:9:17: error: initializing argument 1 of ‘Graph::Graph(int)’
main.cpp:10:16: warning: deprecated conversion from string constant to ‘char*’

这是我正在尝试编译的主要模块,下面是我在 graph.hpp 中的图形类

#include <iostream>
#include "graph.hpp"

using namespace std;

int main()
{
Graph g;
g = new Graph();
char* path = "graph.csv";
g.createGraph(path);
return 0;
}

这是我的图形类

    /*
* graph.hpp
*
* Created on: Jan 28, 2012
* Author: ajinkya
*/

#ifndef _GRAPH_HPP_
#define _GRAPH_HPP_

#include "street.hpp"
#include "isection.hpp"
#include <vector>

class Graph
{
public:
Graph(const int vertexCount = 0);
//void addIsection(Isection is);
//void removeIsection(int iSectionId);
Isection* findIsection(int);
void addStreet(int iSection1, int iSection2, int weight);
void createGraph(const char *path); //uses adj matrix stored in a flat file
//void removeStreet(int streetID);
void printGraph();
~Graph();
private:
//Isection *parkingLot;
//Isection *freeWay;
int** adjMatrix;
std::vector <Street*> edgeList;
std::vector <Isection*> nodeList;
int vertexCount;
};

#endif

最佳答案

这是 C++,不是 Java 或 C#。 new 在这里的工作方式不同。

new 表达式返回指针。您不能将指向 Graph(即 Graph*)的指针分配给 Graph 类型的变量:

Graph g;
g = new Graph(); // Graph = Graph* ? nope

似乎编译器试图“提供帮助”并尝试使用您的构造函数 take 接受一个 int 参数来生成 Graph 类型的值,但它可以将 Graph* 转换为 int

当您编写 Graph g; 时,您已经有了一个 Graph 对象。您不需要使用 new 创建一个。事实上,您可能甚至不想这样做,因为它会导致 to memory leaks .

然后是这一行:

char* path = "graph.csv";

"graph.csv" 的类型为 char const[10],因此您不应将其分配给 char*。在过去你可以,但事实证明那是个坏主意。该功能被标记为已弃用,现在已在 C++ 中完全删除。除了这样做,您还可以:

  • 用它制作一个数组:char path[] = "graph.csv";;
  • 使用正确的类型创建一个指向它的指针:char const* path = "graph.csv";(这是有效的,因为 array types decay to pointers );

关于c++ - 使用 g++ 编译主模块的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com