2015-01-08 8 views
-1

Я пытался выяснить, как это исправить, но я просто не вижу, что не так. Сообщение (ы) об ошибке следующие:Что вызывает эта ошибка LNK2019? Неразрешенная внешняя символьная ошибка?

error LNK2019: unresolved external symbol "public:_thiscall Circle::Circle(coid)" ([email protected]@[email protected]) reference in function "public:_thiscall treeBranch::treeBranch(void)" ([email protected]@[email protected]) 

error LNK2019: unresolved external symbol "public: void_thiscall Circle::render(void)" (...) referenced in function "public: void_thiscalltreeBranch::renderTreeBranch(float,float,float,float)" (...) 

error LNK1120: 2 unresolved externals 

Я посмотрел вокруг сети, и он упомянул я могу использовать «Круг» по-разному к тому, как это было определено, но я не могу показаться, чтобы определить это, так что любая помощь будет принята с благодарностью. Ниже приведены файлы treeBranch.cpp и .h, а также файл Circle.h.

treeBranch.cpp

#include "stdafx.h" 
#include "treeBranch.h" 
#include "Circle.h" 

using namespace std; 
using namespace CoreStructures; 


treeBranch::treeBranch() { 

trunkComponent = new Circle(); 

// Load texture images 
treeTexture = wicLoadTexture(wstring(L"\\Textures\\Trunk.png")); 

// Load shaders that make up the snowmanShader program 
treeShader = setupShaders(string("Shaders\\basic_vertex_shader.txt"), string("Shaders\\texture_fragment_shader.txt")); 

// Setup uniform locations 
locT = glGetUniformLocation(treeShader, "T"); 
} 



// Render snowman object. x, y represent the position of the snowman's body, scale determines the scale of the snowman and orientation is the angle of the snowman (in degrees) 
void treeBranch::renderTreeBranch(float x, float y, float scale, float orientation) { 

// "Plug in" the snowman shader into the GPU 
glUseProgram(treeShader); 


// 1. Draw the main body 

// Create matrices based on input parameters 
GUMatrix4 bodyTransform = GUMatrix4::translationMatrix(x, y, 0.0f) * 
    GUMatrix4::rotationMatrix(0.0f, 0.0f, orientation*gu_radian) * 
    GUMatrix4::scaleMatrix(scale, scale, 1.0f); 

// Upload body transform to shader 
glUniformMatrix4fv(locT, 1, GL_FALSE, (GLfloat*)&bodyTransform); 

// Use the snow texture for the main body 
glBindTexture(GL_TEXTURE_2D, treeTexture); 

// Draw the circle for the body 
trunkComponent->render(); 



// 2. draw head 

// - Setup the RELATIVE transformation from the centre of the body to where the head's origin will be 
// - Like the body, the head uses the same circle model so the origin will be in the middle of the head 
// - Offsets are calculated in terms of the parent object's modelling coordinates. Any scaling, rotation etc. of the parent will be applied later in the matrix sequence. 
// - This makes relative modelling easier - we don't worry about what transforms have already been applied to the parent. 
GUMatrix4 body_to_head_transform = GUMatrix4::translationMatrix(0.0f, 1.25f, 0.0f) * GUMatrix4::scaleMatrix(0.65f, 0.65f, 1.0f); 

// Since we're working with a relative transform, we must multiply this with the parent objects's (that is, the body's) transform also 
// REMEMBER: THE RELATIVE TRANSFORM GOES LAST IN THE MATRIX MULTIPLICATION SO IT HAPPENS FIRST IN THE SEQUENCE OF TRANSFORMATIONS 
GUMatrix4 headTransform = bodyTransform * body_to_head_transform; 

// Upload the final head transform to the shader 
glUniformMatrix4fv(locT, 1, GL_FALSE, (GLfloat*)&headTransform); 

// Bind the head texture 
glBindTexture(GL_TEXTURE_2D, treeTexture); 

// Draw the circle for the head 
trunkComponent->render(); 
} 

treeBranch.h

#pragma once 

#include <glew\glew.h> 
#include <freeglut\freeglut.h> 
#include <CoreStructures\CoreStructures.h> 
#include "texture_loader.h" 
#include "shader_setup.h" 
#include "Circle.h" 

class Circle; 

class treeBranch { 

// Snowman made up of multiple circle objects (we store just one instance and render this multiple times) 
Circle *trunkComponent; 

// Textures for snowman body and head 
GLuint treeTexture; 

// Shader program for drawing the snowman 
GLuint treeShader; 

// Uniform variable locations in snowmanShader 
GLuint locT; 


public: 

// Default constructor 
treeBranch(); 

// Render snowman object. x, y represent the position of the snowman's body, scale determines the scale of the snowman and orientation is the angle of the snowman (in degrees) 
void renderTreeBranch(float x, float y, float scale, float orientation); 

}; 

Circle.h

#pragma once 

#include <glew\glew.h> 
#include <freeglut\freeglut.h> 
#include <CoreStructures\CoreStructures.h> 
#include "texture_loader.h" 
#include "shader_setup.h" 


class Circle { 

// Variables to represent the VBO and VAO of the circle object 
GLuint circleVAO, vertexPositionVBO, texCoordVBO; 

public: 

// Default constructor - setup circle with unit radius 
Circle(); 

// Render circle - all relevant transformations are assumed to be setup before calling this function 
void render(void); 

}; 
+2

Итак, где указаны определения «Circle :: Circle();» и «Circel :: render();'? – jrok

ответ

1

Вам нужно т o реализовать эти методы, например, я не вижу реализации Circle :: Circle(), а также функции рендеринга, вы забыли скомпилировать и добавить Circle.cpp в ссылку? Это ошибки связи.

+0

Спасибо, я копировал файлы из лекции и, должно быть, забыл файл cpp haha. Добавление Circle.cpp заставило все работать (я подумал, что было странно, что у меня нет файла Circle.cpp, но я не заметил его в списке haha) – NeoKuro

+0

, если бы я мог, но не достаточно rep. Я проверял ответ как правильный, хотя :) – NeoKuro

 Смежные вопросы

  • Нет связанных вопросов^_^