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,因此链接器无法解析缺少的方法。