|
Thank all.
I have try it in
C++ Builder. It runs well there.
I could have
defined the function within the class declaration. However, I am not able to do
that. The reason is illustrated by the following example. In the example, A<T>::nested uses B<T> and B<T>::nested used A<T>.
// begin of A.h
#pragma once
// foreword
declaration, but we still can not use class B.
//that is why I can't put the definition of A<T>::nested::test() inside
the declaration;
template <class T> class B;
template <class
T> class A
{
public:
class nested
{
public:
void test(B<T> b);
};
nested GetNested() const
{
return nested();
}
}
#include A.imp
// end of A.h
//A.imp
#pragma once
#include B.h //
now we can use class B
template <class
T> void A<T>::nested::test( B<T> b)
{
b.GetNested();
}
//end of A.imp
//begin of A.cpp
#include A.h //the
only one line in A.cpp
//end of A.cpp
// B.h
#pragma once
// foreword
declaration, but we still can not use class A.
//that is why I can't put the definition of B<T>::nested::test() inside
the declaration;
template <class
T> class A; // foreword declaration
template <class
T> class B
{
public:
class nested
{
public:
void test(A<T> b);
};
nested GetNested() const
{
return nested();
}
}
#include B.imp
// end of B.h
//B.imp
#pragma once
#include A.h
template <class
T> void B<T>::nested::test( A<T> a)
{
a.GetNested();
}
//end of B.imp
//begin of B.cpp
#include B.h //the
only one line in B.cpp
//end of B.cpp
The result is that
this situation force me not to use nested class.
What a pity. My
logical design is forced to change by a bug.;( Or I have to change my compiler.
Lirong
|
|
|
|
|
You can't do the implementation of temp<t>::nested::test() like you're doing. Even though Bjarne say's it's possible (C++ 3rd edition), the VC++ compiler does NOT support this. All the implementation MUST be in line - i.e.
//declaration
template <class t=""> class temp
{
public:
class nested
{
public:
//this must be implemented here
void test()
{
//whatever
}
};
void test()
{
nested nes;
nes.test();
}
};
Hope this helps !
Jim Crafton
|
|
|
|
|
Hi,
Can any please illustrate the scrolling of content in a window, in a class derived from CWnd and not the MFC view classes?
Thanks in advance,
regards,
Mangesh Sardesai.
|
|
|
|
|
I am trying to use the joystick via joySetCapture as so:
joySetCapture(m_hWnd, JOYSTICKID1, 100, TRUE);
My problem is that this method polls every x milliseconds (100 in this case) so in the MM_JOY1MOVE case (when you use the directional pad) it sometimes misses the fact that you pressed a direction. For instance if you press the UP direction too quick it might not catch it, or if you press it ever so slightly too long it can count as two presses.
What I am looking for is a way to have the joystick/gamepad notify me when a button is pressed so that I don't have to use this polling method. Like a joystick hook or something of the sort. Any ideas?
Here is some of my code for clarity on what I am currently doing:
BOOL CGamepadDlg::PreTranslateMessage(MSG* pMsg) {
switch (pMsg->message) {
case MM_JOY1BUTTONDOWN:
if (pMsg->wParam & JOY_BUTTON1) {
TRACE("BUTTON 1 DOWN\n");
} else if (pMsg->wParam & JOY_BUTTON2) {
TRACE("BUTTON 2 DOWN\n");
} else if (pMsg->wParam & JOY_BUTTON3) {
TRACE("BUTTON 3 DOWN\n");
} else if (pMsg->wParam & JOY_BUTTON4) {
TRACE("BUTTON 4 DOWN\n");
}
break;
case MM_JOY1MOVE:
if (LOWORD(pMsg->lParam) > 41000) {
TRACE("RIGHT\n");
} else if (LOWORD(pMsg->lParam) < 11000) {
TRACE("LEFT\n");
} else if (HIWORD(pMsg->lParam) > 41000) {
TRACE("DOWN\n");
} else if (HIWORD(pMsg->lParam) < 11000) {
TRACE("UP\n");
}
break;
case WM_DESTROY:
joyReleaseCapture(JOYSTICKID1);
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
|
|
|
|
|
Use DirectX.
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Isn't this something that the end user will have to have installed? So I would have to package it with my app or such?
|
|
|
|
|
Hi all.
I have string like "Hadi", i must put Enter character in end of my string : "Hadi" + Enter character.
char *szTemp = new char[10];
szTemp = "Hadi";
szTemp[5] = char(13);
szTemp[6] = '\0';
But this code won't work ...
Please help me ...
My month article: Game programming by DirectX by Lan Mader.
Please visit in: www.geocities.com/hadi_rezaie/index.html
Hadi Rezaie
|
|
|
|
|
szTemp = "Hadi\n\r\0"
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Hello, the codegurus around the world.;)
szTemp = "Hadi\n\r\0"
Humm, really?
First of all, "" shows the string. So, without '\0', "" adds NULL automatically.
Second, I don't think that we need the '\r'.
Enter key is just '\n'.
szTemp = "Hadi\n".
Someone else?
Have a nice day!
-Masaaki Onishi-
|
|
|
|
|
I didn't think the \0 was needed, but if we are dealing with a char * IMHO it's better to put it in, just in case. To put a newline in a console app is \n\r, I have always done the same for strings so if I only need \n then I stand corrected.
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Hadi-
Since I seem to have tons of free time.. here goes.
Historically, ascii 13,or ^M ( ctrl M ) is newline and
ascii 10, or ^J is carriage return.
Some output devices automatically translate a ^M (\n) to
a ( ^J + ^M) same as \r\n. ( for example command prompt, unix shell etc)
Some output devices DO NOT convert a ^M (\n) to a ^J ^M (\r\n),
( for example, Windows Edit Controls, Button, tooltips etc).
The best way to deal with this is to follow this rule :-
Always add a \r\n , if you want the effect of a "newline".
This way it will be guaranteed to work, no matter what your output
device is..
hope that helps..
vivek
|
|
|
|
|
Hi, I have some trouble to put an image (bitmap) on a child or parent window of a MDI. What I need is a very complete procedure step by step including new variable to put in specific class, code to add, etc., to do it easily.
Pou
|
|
|
|
|
You mean in the area visible when the MDI windows are not maximised ? It's just the CMainFrame OnEraseBackground, isn't it ?
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Well, in MDI it's not CMainFrame. The 'app workspace' is actually MDI Client window. CMDIFrameWnd has a public HWND member called m_hWndMDIClient - this is the window to subclass.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Is it possible to convert a bitmap that is on a child window of a MDI, to a kind of button? How?
Pou
|
|
|
|
|
Create a CBitmapButton or CButton in the first place. What do you specifically want to do ?
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
How can I determine the drive letter of my cd-rom while executing a .BAT file?
Pou
|
|
|
|
|
I'm relatively new to C++ programming which i'm sure this question will demonstrate...
I want to use vector's in an MFC dialog application that AppWizard generated for me, I added #include <vector.h> but when I declare vector<int> vTest; I get an error saying that the type is not found...
So I tried adding a "using namespace std;" and it said it can't find the namespace std...
What am I doing wrong???
Thanks,
William
|
|
|
|
|
Let me start by saying congratulations for using the STL. I was not so smart when I was starting and am only learning it now. A vector, like any array, needs to know what it is going to hold. I don't know if you're familair with templates, but they essentially allow you to specify a type as a parameter. To specify a vector of int's, you must do this:
vector<int> m_MyIntVector;
Having #included vector, you can remove using namespace std if you want to.
Christian
#include "std_disclaimer.h"
People who love sausage and respect the law should never watch either one being made.
The things that come to those who wait are usually the things left by those who got there first.
|
|
|
|
|
Ok -
You have to say what the vector is going to hold.
So,
vector myVector; // Will not work..
Try using;
vector<int> myVector;
vector<float *=""> myVector;
vector<myownobject> myVector;
...etc
I am going to venture a guess you are coming from Java-land, where you
just say Vector myVector; then you can stick anything in there..
STL is more type safe than Java containers..
Good luck
Vivke
|
|
|
|
|
DUH -
I knew Christian coulndt have overlooked the < int >
in the template.. I didnt realize I was writing HTML in the post window.
(Definitely confusing)
Anyway, here goes..
Use;
vector < int > ; or
vector < float * >
etc..
Tips , use the > and < for the < and > signs
|
|
|
|
|
Duh - that gets me every time. I obviously didn't look at my post. < > (just testing)
Christian who just swapped PC's with Taylor
|
|
|
|
|
When U are using the MFC there are lot many classes are there which gives the functionality of vector.
Carray, CList, SafeArray like somay classes are there. U can Initiliza the classes and use it directly in your program. If you are not using MFC then inclede all the std header files.
|
|
|
|
|
When U are using the MFC there are lot many classes are there which gives the functionality of vector.
I realise that there are people here who do not speak English as a first language, but fair dinkum - 'there are a lot many classes are there' ??? 'like somay classes are there' ??? 'Initiliza' ???
Carray, CList, SafeArray like somay classes are there. U can Initiliza the classes and use it directly in your program. If you are not using MFC then inclede all the std header files.
To use CArray ( which is the same as a vector in it's O notation behaviour ( STL is defined in terms of O notation - vector was obviously meant to be an array, but it does not HAVE to be if someone comes up with a better idea )) you need to use tempplate arguments, you actually need to specify two rather than one. CList impliments a list, like deque. A list has totally different behaviour to an array in terms of speed ( quicker to remove items in the middle, slower to find them ). If you are not using MFC then you do not have CArray/CList/CSafeArray, unless there are alternate versions in the ATL headers.
Either way, the STL is more powerful, more flexible and cross platform. I recommend you use the MFC classes for the sake of learning them, but stick to STL. I also recommend you write your own list and array class, just to get a good idea of what goes on under the hood, but still use STL. I recommend the person who wrote this reply also learn the difference between container types and consider learning the STL.
Christian logged in as Alex
|
|
|
|
|
> U can Initiliza the classes
Looks like gangsta rap
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|