undefined reference class 方法最小示例
undefined reference class method minimal example
我最近一直在编程 java 并试图回到 cpp。我在处理小示例,在导入 classes/headers 或链接时遇到一些问题。
我在 第 5 行使用此代码获得未定义的引用:mc.getval()。希望你能告诉我我的 import/linking 在哪里关闭。谢谢!
minmain.cc
#include <iostream>
#include "minheader.h"
int main() {
Minclass mc;
std::cout << mc.getval();
}
minheader.h
#ifndef MINCLASS_H
#define MINCLASS_H
class Minclass {
public:
int getval();
};
#endif
minclass.cc
class Minclass {
int val = 5;
public:
int getval() {return val;}
};
生成文件
CC=gcc
CXX=g++
RM=rm -f
CPPFLAGS=-g -Wall -Werror -Wextra
LIBS=minheader.h
SRCS=minmain.cc minclass.cc
OBJS=$(subst .cc,.o,$(SRCS))
all: minmain
minmain: $(OBJS)
$(CXX) $(LDFLAGS) -o minmain $(OBJS) $(LIBS)
minmain.o: minmain.cc
minclass.o: minclass.cc
clean:
$(RM) $(OBJS)
distclean: clean
$(RM) minmain
minclass.cc 应该是这样的
#include "minheader.h"
int MinClass::getval() {
return val;
}
和minheader.h应该有完整的class定义,包括val
成员变量。
#ifndef MINHEADER_H
#define MINHEADER_H
class Minclass {
int val = 5;
public:
int getval();
};
#endif
在您要保护的头文件之后命名 include guard 也是正常的,而不是在作为头文件内容的 class 之后。
您的版本声明了两个不同的 MinClass
class,因此链接器无法解析缺少的方法。
我最近一直在编程 java 并试图回到 cpp。我在处理小示例,在导入 classes/headers 或链接时遇到一些问题。
我在 第 5 行使用此代码获得未定义的引用:mc.getval()。希望你能告诉我我的 import/linking 在哪里关闭。谢谢!
minmain.cc
#include <iostream>
#include "minheader.h"
int main() {
Minclass mc;
std::cout << mc.getval();
}
minheader.h
#ifndef MINCLASS_H
#define MINCLASS_H
class Minclass {
public:
int getval();
};
#endif
minclass.cc
class Minclass {
int val = 5;
public:
int getval() {return val;}
};
生成文件
CC=gcc
CXX=g++
RM=rm -f
CPPFLAGS=-g -Wall -Werror -Wextra
LIBS=minheader.h
SRCS=minmain.cc minclass.cc
OBJS=$(subst .cc,.o,$(SRCS))
all: minmain
minmain: $(OBJS)
$(CXX) $(LDFLAGS) -o minmain $(OBJS) $(LIBS)
minmain.o: minmain.cc
minclass.o: minclass.cc
clean:
$(RM) $(OBJS)
distclean: clean
$(RM) minmain
minclass.cc 应该是这样的
#include "minheader.h"
int MinClass::getval() {
return val;
}
和minheader.h应该有完整的class定义,包括val
成员变量。
#ifndef MINHEADER_H
#define MINHEADER_H
class Minclass {
int val = 5;
public:
int getval();
};
#endif
在您要保护的头文件之后命名 include guard 也是正常的,而不是在作为头文件内容的 class 之后。
您的版本声明了两个不同的 MinClass
class,因此链接器无法解析缺少的方法。