Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

what wrong with my program...

Posted on 2003-11-04
4
Medium Priority
?
232 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 9

Accepted Solution

by:
_ys_ earned 80 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

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

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

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
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.

618 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