我有1个头文件和2个.cpp
文件(我已经包含main.cpp
)并且正在使用CodeBlocks。我的问题是编译器在构建它时没有看到第二个.cpp
文件(graph_interface.cpp
)中的错误。你有什么建议吗?我哪里错了?。
即使我在graph_implementation.cpp
文件中做错了,我也得到了输出:
Target is up to date.
Nothing to be done (all items are up-to-date).
例如,我在main.cpp
//main.cpp
#include "graph_interface.h"
int main(int argc,char *argv[])
{
return 0;
}
graph_interface.h
档案
#ifndef GRAPH_INTERFACE_H_INCLUDED
#define GRAPH_INTERFACE_H_INCLUDED
typedef struct{int v;int w;} Edge;
Edge EDGE(int,int);
typedef struct graph *Graph;
Graph GRAPHinit(int);
void GRAPHinsertE(Graph,Edge);
void GRAPHremoveE(Graph,Edge);
int GRAPHedges(Edge[],Graph G);
Graph GRAPHcopy(Graph);
void GRAPHdestroy(Graph);
#endif // GRAPH_INTERFACE_H_INCLUDED
和其他cpp文件graph_implementation.cpp
#include "graph_interface.h"
using namespace std;
struct graph{
int V;
int E;
int **adj;
};
Graph GRAPHinit(int V){
Graph G=malloc(sizeof *G);
G->V=V;
G->E=0;
G->adj=MATRIXint(V,V,0);
return G;
;// not give anything
}
答案 0 :(得分:0)
如果你期待这一行:
;// not give anything
产生错误,你没有看到错误的原因是因为空语句在C ++中完全合法;此行不包含任何错误。
// complete, legal C++ program
int main() {
;
}
使用new
/ delete
或malloc
/ free
这种方式违背了现代C ++实践,因为它很难正确完成。现代实践更像是:
class Graph {
int V;
Matrix adj;
public:
Graph(int V)
: V(V), adj(V*V, 0)
{}
}
int main() {
Graph g; // automatically initialized and destroyed correctly
// ...
}