首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器说的是重定义错误,但是函数只在头文件和C++文件中

编译器说的是重定义错误,但是函数只在头文件和C++文件中
EN

Stack Overflow用户
提问于 2021-02-23 17:51:35
回答 1查看 45关注 0票数 0

当我在头文件中描述函数的原型并在MoveMatrix.cpp上实现函数时,我得到了错误:编译器说"error: redifinition of nc::NdArray translate(float,float,float)",尽管我没有在MoveMatrix.h之外的其他文件中描述或提到这个函数。我从MoveMatrix.cpp的4行中得到了错误!

这是MoveMatrix.h

代码语言:javascript
复制
//MoveMatrix.h
#pragma once
#include<NumCpp.hpp>

nc::NdArray<float> translate(float trX, float trY, float trZ) {};
nc::NdArray<float> rotation_X(float angle) {};
nc::NdArray<float> rotation_Y(float angle) {};
nc::NdArray<float> rotation_Z(float angle) {};
nc::NdArray<float> scale(float scale_coeff) {};

我是MoveMatrix.cpp

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

nc::NdArray<float> translate(float trX, float trY, float trZ)
{
    return nc::NdArray<float>{
        {1, 0, 0, 1},
        {0, 1, 0, 0},
        {0, 0, 1, 0},
        {trX, trY, trZ, 1}
    };
}

nc::NdArray<float> rotation_X(float angle)
{
    return nc::NdArray<float>{
        {1, 0, 0 , 0},
        {0, cos(angle), sin(angle), 0},
        {0, -sin(angle), cos(angle), 0},
        {0, 0, 0, 1}
    };
}

nc::NdArray<float> rotation_Y(float angle)
{
    return nc::NdArray<float>{
        {cos(angle), 0, -sin(angle), 0},
        {0, 1, 0, 0},
        {sin(angle), 0, cos(angle), 0},
        {0, 0, 0, 1}
    };
}
nc::NdArray<float> rotation_Z(float angle)
{
    return nc::NdArray<float>{
        {cos(angle), sin(angle), 0 , 0},
        {-sin(angle), cos(angle), 0, 0},
        {0, 0, 1, 0},
        {0, 0, 0, 1}
    };
}

nc::NdArray<float> scale(float scale_coeff)
{
    return nc::NdArray<float>{
        {scale_coeff, 0, 0, 0},
        {0, scale_coeff, 0, 0},
        {0, 0, scale_coeff, 0},
        {0, 0, 0, scale_coeff}
    };
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 17:54:20

后缀{}表示函数在标头中定义。这样就违反了一个定义规则,编译就会失败。移除它们以将语句转换为转发声明。

换句话说,

代码语言:javascript
复制
nc::NdArray<float> translate(float trX, float trY, float trZ) {};

变成了

代码语言:javascript
复制
nc::NdArray<float> translate(float trX, float trY, float trZ);

诸若此类。

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

https://stackoverflow.com/questions/66338460

复制
相关文章

相似问题

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