首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的类没有链接?

为什么我的类没有链接?
EN

Stack Overflow用户
提问于 2012-11-21 05:28:04
回答 1查看 274关注 0票数 0

这周我开始将我的知识从C语言升级到C++,我想重载一些运算符

我有一个叫Matrix的类

代码语言:javascript
复制
#include "lcomatrix.h"

inline Matrix::Matrix(unsigned rows, unsigned cols) :
        rows_(rows), cols_(cols)
{
        data_ = new double[rows * cols];
}

inline Matrix::~Matrix() {
    delete[] data_;
}

inline double& Matrix::operator()(unsigned row, unsigned col) {
    return data_[cols_ * row + col];
}

inline double Matrix::operator()(unsigned row, unsigned col) const {
    return data_[cols_ * row + col];
}

lcomatrix.h的内容是

代码语言:javascript
复制
#include <iostream>

class Matrix {
public:
    Matrix(unsigned rows, unsigned cols);
    double& operator()(unsigned row, unsigned col);
    double operator()(unsigned row, unsigned col) const;

    ~Matrix(); // Destructor        
    Matrix& operator=(Matrix const& m); // Assignment operator      

private:
    unsigned rows_, cols_;
    double* data_;
};

Main.cpp

代码语言:javascript
复制
#include "lcomatrix.h"
#include <iostream>


/*-
 * Application entry point.
 */
int main(void) {

    Matrix mx(12,12);

    //std::cout << mx << std::endl;

    return 0;
}

生成文件:

代码语言:javascript
复制
CPPFLAGS=-I /path/lcomatrix/
EFLAGS=

all : main.o lcomatrix.o
    g++ $(EFLAGS) -o main.out  main.o lcomatrix.o 

main.o: lcomatrix.o
    g++ $(EFLAGS) $(CPPFLAGS) -c main.cpp

lcomatrix.o: 
    g++ $(EFLAGS) -c /home/robu/UbuntuOne/ChibiOS-RPi/lcomatrix/lcomatrix.cpp

clean:
    rm *.o main.out 

当我尝试构建时,我收到以下链接错误:

代码语言:javascript
复制
make all 
g++  -c /home/robu/UbuntuOne/ChibiOS-RPi/lcomatrix/lcomatrix.cpp
g++  -I /home/robu/UbuntuOne/ChibiOS-RPi/lcomatrix/ -c main.cpp
g++  -o main.out  main.o lcomatrix.o 
main.o: In function `main':
main.cpp:(.text+0x1b): undefined reference to `Matrix::Matrix(unsigned int, unsigned int)'
main.cpp:(.text+0x2c): undefined reference to `Matrix::~Matrix()'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

我想这是一个非常愚蠢的错误,但是作为一个初学者,我想不出解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 05:33:41

您的方法定义都是inline。为了内联一个函数,每当编译器编译使用它的代码时,都需要看到它的定义。

要么将函数定义放在使用时可以看到的地方--在头文件中,或者放在Main.cpp包含的另一个文件中--或者不要将它们标记为内联。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13482467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档