未定义的类构造函数引用,当它被正确定义时
Undefined refrence to class constructor, when it is properly defined?
我有一个类定义在头和正确实现(我认为),这是正确包含(我认为)无论我试图使用它。
我想我遗漏了一些关于类定义的基本语法。
我已经阅读了几乎每一个c++"未定义的引用类构造器"的问题在stackoverflow上,但他们似乎都不适用我的情况。
<标题> main.cpp h1> init.cpp h1> shader.h h1> shader.cpp h1>错误:
/home/dok/SDL2/ngin/engine/source/init.cpp|71|undefined reference to `Shader::Shader(char*, unsigned int)'|
编辑# 2:我能够通过BASH终端使用gpp
编译源代码,并且它毫不费力地编译(注意:我已经根据许多回答者的建议更新了代码),所以这似乎是一个code::Blocks问题。
这是我用来用gpp编译程序的命令:g++ main.cpp source/init.cpp source/shader.cpp -lSDL2 -lGLEW -lGL
您将构造函数声明为
Shader(char* path, GLenum p_type);
虽然错误信息显示您正在使用声明为
的构造函数Shader(char*, unsigned int);
即第二个参数不重合,没有从unsigned int
类型到GLenum
类型的隐式转换。
我不知道GLenum
类型是如何定义的,但是您可以尝试以以下方式调用构造函数
Shader vertex("../shaders/vertex.glsl", static_cast<GLenum>( GL_VERTEX_SHADER) );
使用从类型unsigned int
到类型GLenum
的显式转换
也要考虑使用字符串字面值作为第一个参数。类型为const char []
。所以它不能被用作论点。您应该将第一个参数声明为const char *
还有头文件的递归包含。标题shader.h
包含init.h
, init.h
包含shader.h
相关文章:
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 当类成员参数具有相同的名称时,如何定义构造函数?
- C++定义构造函数使对象成为非 POD
- 请描述一下在 c++ 中在此类中定义构造函数的方式?
- 不为 emplace() 定义构造函数的解决方法
- 已定义构造函数的构造函数无法识别
- 在自定义构造函数中的堆上创建指针
- c++ 17 中结构自动定义构造函数的规则是什么?
- Python 错误:在 SWIG 生成的C++模板化代码模块中没有定义构造函数
- unique_ptr看不到派生类的自定义构造函数
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 为什么一个非平凡的成员需要为同一类中的匿名联合定义构造函数
- 为其成员根据模板基类存在的类定义构造函数
- 如何在派生类上具有默认行为,而不是重新定义构造函数
- 在结构中定义构造函数
- 将从基类继承的构造函数与自定义构造函数混合使用
- 如何在模板类外部定义构造函数
- C 需要使用自定义构造函数的帮助
- 可以联合包含具有用户定义构造函数的类的对象
- 具有用户定义构造函数的非聚合类的值初始化