【问题标题】:Static function can not be accessed or used C++静态函数无法访问或使用 C++
【发布时间】:2020-02-21 04:02:24
【问题描述】:

我正在尝试使用静态类,但由于某种原因,我遇到了一个非常无用的错误。

这是我试图访问的静态类:

static class Camera
{

public:
    Camera();
    ~Camera();

    static glm::mat4 viewMatrix;

    static void move(float x, float y, float z) {// add 3 more values for the cube
        viewMatrix = glm::lookAt(glm::vec3(x, y, z),glm::vec3(0.0f, 0.0f, 0.0f),glm::vec3(0.0f, 1.0f, 0.0f));
    } 


    static glm::mat4 getViewMatrix() {
        return viewMatrix;
    }
};

这是我尝试访问函数的方式:

 Camera::move(xdist, ydist, zdist);

错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2001 unresolved external symbol "public: static struct glm::detail::tmat4x4<float> Camera::viewMatrix" (?viewMatrix@Camera@@2U?$tmat4x4@M@detail@glm@@A) sample  

【问题讨论】:

  • 由于静态成员需要在程序启动时初始化一次,所以需要创建一个.cpp文件,定义如下:glm::mat4 Camera::viewMatrix(parameters_here);
  • @Gilles-PhilippePaillé viewMatrix 不接受任何参数。另外,这是课程的一部分,创建另一个 .cpp 是什么意思
  • 链接的重复问题非常广泛,并没有提供任何关于 OP 应该如何解决他的问题的线索。应该提供更好的链接问题/答案。
  • 什么是静态类?这不是 C++。
  • @LightnessRacesinOrbit 可能是 C# 甚至是 Java。绝对意味着被识别为重复的问题是无关紧要的。

标签: c++ visual-studio class static-classes


【解决方案1】:

已解决,将此添加到cpp文件中:

 glm::mat4 Camera::viewMatrix = glm::mat4(1.0);

需要在.cpp而不是.h文件中初始化viewMatrix

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2021-08-19
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多