Solved

what wrong with my program...

Posted on 2003-11-04
4
209 Views
Last Modified: 2010-04-02
I got a question is I not confirm my code. I use object – oriental and OpenGL concept to draw a triangle. I got a Position class which store 3 float variable (x, y, z). Then I use the Triangle class which contain of array of 3 Position which contain the coordinate of the 3 vertices of Triangle. I use Driver.cpp to test my program (main class to control everything). Following is my code to test the program:

//Driver.cpp
#include <windows.h>
#include "Globals.h"
#include "OpenGLScene.h"
#include "MyOpenGLScene.h"
int WINAPI WinMain(HINSTANCE      hInstance,            // Instance
                  HINSTANCE      hPrevInstance,            // Previous Instance
                  LPSTR lpCmdLine,                  // Command Line Parameters
                  int nCmdShow)                  // Window Show State
{
      // Position accept 3 variable(x, y, z)
      Position* p1 = new Position(0.0f, 1.0f, -6.0f);
      // Position accept 3 variable(x, y, z)
      Position* p2 = new Position(-1.0f, -1.0f, -6.0f);
            // Position accept 3 variable(x, y, z)
      Position* p3 = new Position(1.0f, -1.0f, -6.0f);
      
      // because 3 Position for draw a Triangle
      Position* p[] = {p1, p2, p3};
      
      // Trianlge to store array of Position
      Triangle* myTriangle = new Triangle(*p);
      
      // add Triangle
      myStage->addTriangle(myTriangle);
      
      //run the code
      OpenGLScene* myStage = new MyOpenGLScene("Stage 1",800,600,16,0);
      myStage->start();
      return 0;
}

when I test addTriangle function then got this kind of error:
error C2440: '=' : cannot convert from 'class Position *(__thiscall Triangle::*)(void)' to 'class Position *' There is no context in which this conversion is possible

error C2440: '=' : cannot convert from 'float (__thiscall Position::*)(void)' to 'float'
        There is no context in which this conversion is possible

error C2440: '=' : cannot convert from 'float (__thiscall Position::*)(void)' to 'float'
        There is no context in which this conversion is possible

error C2440: '=' : cannot convert from 'float (__thiscall Position::*)(void)' to 'float'
        There is no context in which this conversion is possible

I think my code are stupid and then I don’t know how to make it simple and fix the error. Can someone check for me. Thanks!

Following is my other code:
// Triangle.cpp file
#include "MyOpenGLScene.h"

int i=0;
Triangle *triangle[50];
 
MyOpenGLScene::MyOpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag):OpenGLScene(title, width, height, bits, fullscreenflag) { }
void MyOpenGLScene::addTriangle(Triangle *T) {
 triangle[i] = aTriangle[1];
 i++;
}
 
void MyOpenGLScene::DrawTriangle(Triangle *T) {
 Position *vertex;
 float vx, vy, vz;
 glBegin(GL_TRIANGLES);
  for(int i=0; i<3; i++) {
   vertex = T->getVertices;
   vx = vertex->getX;
   vy = vertex->getY;
   vz = vertex->getZ;
   glColor3f(1.0f,1.0f,1.0f);
   glVertex3f(vx, vy, vz);
  }
 glEnd();
}
 
int MyOpenGLScene::DrawGLScene() {
 this->DrawTriangle(T);
 return 0;
}
 
// Triangle.cpp file
#include "Triangle.h"

Triangle::Triangle(Position position[3]):red(1.0), green(1.0), blue(1.0) {
 this->position[0] = position[0];
 this->position[1] = position[1];
 this->position[2] = position[2];
}
void Triangle::setColor(float red, float green, float blue) {
 this->red = red;
 this->green = green;
 this->blue = blue;
}
float Triangle::getRed() {
 return red;
}
float Triangle::getGreen() {
 return green;
}
float Triangle::getBlue() {
 return blue;
}
Position* Triangle::getVertices() {
 return position;
}
// Position.cpp file
Position::Position() { }
Position::Position(float x, float y, float z) {
 this->x = x;
 this->y = y;
 this->z = z;
}
float Position::getX() {
 return x;
}
float Position::getY() {
 return y;
}
float Position::getZ() {
 return z;
}
 
From: Sally
0
Comment
Question by:sally1980
4 Comments
 
LVL 9

Accepted Solution

by:
_ys_ earned 20 total points
ID: 9679161
Start with this:

>> Triangle* myTriangle = new Triangle(*p);
Triangle* myTriangle = new Triangle (p);  // no '*'
0
 
LVL 13

Expert Comment

by:SteH
ID: 9679607
You use at some places Position* and later you need only Position.
To get an instance of Position use
Position p1(1,1,-6);
Now p needs to be declared as
Position p[3] and then you can continue with the tip of _ys_.
0
 
LVL 9

Expert Comment

by:tinchos
ID: 10242504
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: _ys_ {http:#9679161}

Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

Tinchos
EE Cleanup Volunteer
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Implementing a ResolveEventHandler in C++ 13 114
TCP/IP Socket - connection close results in data lost 14 120
Arduino EDI - Programming language 3 79
Path to  STL Map header file 1 41
Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

929 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now