LinuxQuestions.org
Share your knowledge at the LQ Wiki.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 02-26-2008, 09:24 PM   #16
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15

Didn't find anything, so I am pasting it here (maybe you will see what's the problem) :
Code:
src/halfEdges/HE_elements/HE_Vertex.h|24|erreur: ISO C++ forbids declaration of «Mesh" with no type| 
^ same as always. Don't know why it begins by this as it should compile Mesh first. 
This means that somehow it doesn't include the Mesh file at all right ?
src/halfEdges/HE_elements/HE_Vertex.h|24|erreur: expected «;" before «*" token|
src/halfEdges/HE_elements/HE_Vertex.h||In member function «Vector3& HES::HE_Vertex::getMyCoords() const":|
src/halfEdges/HE_elements/HE_Vertex.h|65|erreur: «const class HES::HE_Vertex" has no member named «mesh"|
src/halfEdges/HE_elements/HE_Vertex.h||In member function «Vector3& HES::HE_Vertex::getMyNormal() const":|
src/halfEdges/HE_elements/HE_Vertex.h|68|erreur: «const class HES::HE_Vertex" has no member named «mesh"|
src/halfEdges/HE_elements/HE_Vertex.h||In member function «void HES::HE_Vertex::setMyCoords(Vector3*, unsigned int)":|
src/halfEdges/HE_elements/HE_Vertex.h|78|erreur: «class HES::HE_Vertex" has no member named «mesh"|
src/halfEdges/HE_elements/HE_Vertex.h||In member function «void HES::HE_Vertex::setMyNormal(Vector3*, unsigned int)":|
src/halfEdges/HE_elements/HE_Vertex.h|81|erreur: «class HES::HE_Vertex" has no member named «mesh"|
src/halfEdges/HalfEdgeStructure.h|58|erreur: ISO C++ forbids declaration of «Mesh" with no type|
src/halfEdges/HalfEdgeStructure.h|58|erreur: expected «;" before «*" token|
src/halfEdges/HalfEdgeStructure.h|71|erreur: expected `)' before «*" token|
Here we come to Mesh.h
src/entities/Mesh.h|142|erreur: no «const float* Mesh::getVerticesArrayFront() const" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «const float* Mesh::getVerticesArrayFront() const":|
src/entities/Mesh.h|143|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|145|erreur: no «unsigned int* Mesh::getFaceArrayFront(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «unsigned int* Mesh::getFaceArrayFront(unsigned int)":|
src/entities/Mesh.h|146|erreur: «mFacesMap" was not declared in this scope|
src/entities/Mesh.h|149|erreur: no «unsigned int Mesh::getFaceArraySize(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «unsigned int Mesh::getFaceArraySize(unsigned int)":|
src/entities/Mesh.h|150|erreur: «mFacesMap" was not declared in this scope|
src/entities/Mesh.h|153|erreur: no «const GLsizeiptr Mesh::getMVerticesRawSize() const" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «const GLsizeiptr Mesh::getMVerticesRawSize() const":|
src/entities/Mesh.h|154|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|156|erreur: no «const GLsizeiptr Mesh::getMFacesRawSize(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «const GLsizeiptr Mesh::getMFacesRawSize(unsigned int)":|
src/entities/Mesh.h|157|erreur: «mFacesMap" was not declared in this scope|
src/entities/Mesh.h|161|erreur: no «void Mesh::addVertex(Vertex&)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::addVertex(Vertex&)":|
src/entities/Mesh.h|162|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|164|erreur: prototype for «void Mesh::addVertex(Vector3&)" does not match any in class «Mesh"|
src/entities/Mesh.h|161|erreur: candidate is: void Mesh::addVertex(Vertex&)|
src/entities/Mesh.h||In member function «void Mesh::addVertex(Vector3&)":|
src/entities/Mesh.h|165|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|167|erreur: prototype for «void Mesh::addVertex(Vector3&, Vector3&)" does not match any in class «Mesh"|
src/entities/Mesh.h|164|erreur: candidates are: void Mesh::addVertex(Vector3&)|
src/entities/Mesh.h|161|erreur:                 void Mesh::addVertex(Vertex&)|
src/entities/Mesh.h||In member function «void Mesh::addVertex(Vector3&, Vector3&)":|
src/entities/Mesh.h|170|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|173|erreur: no «unsigned int Mesh::getNumberOfVertices() const" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «unsigned int Mesh::getNumberOfVertices() const":|
src/entities/Mesh.h|174|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|177|erreur: no «Vector3& Mesh::getCoords(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «Vector3& Mesh::getCoords(unsigned int)":|
src/entities/Mesh.h|178|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|181|erreur: no «Vector3& Mesh::getNormal(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «Vector3& Mesh::getNormal(unsigned int)":|
src/entities/Mesh.h|182|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|185|erreur: no «void Mesh::setCoords(Vector3*, unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::setCoords(Vector3*, unsigned int)":|
src/entities/Mesh.h|186|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|189|erreur: no «void Mesh::setNormal(Vector3*, unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::setNormal(Vector3*, unsigned int)":|
src/entities/Mesh.h|190|erreur: «mVertices" was not declared in this scope|
src/entities/Mesh.h|193|erreur: no «void Mesh::toggleDisplayHES()" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::toggleDisplayHES()":|
src/entities/Mesh.h|194|erreur: «displayHES" was not declared in this scope|
src/entities/Mesh.h|197|erreur: no «void Mesh::buildHES()" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::buildHES()":|
src/entities/Mesh.h|198|erreur: «class Mesh" has no member named «hes"|
src/entities/Mesh.h|198|erreur: no matching function for call to «HES::HalfEdgeStructure::HalfEdgeStructure(Mesh* const)"|
src/halfEdges/HalfEdgeStructure.h|47|note: candidats sont: HES::HalfEdgeStructure::HalfEdgeStructure()|
src/halfEdges/HalfEdgeStructure.h|47|note:                 HES::HalfEdgeStructure::HalfEdgeStructure(const HES::HalfEdgeStructure&)|
src/entities/Mesh.h|199|erreur: «class Mesh" has no member named «hes"|
src/entities/Mesh.h|202|erreur: no «void Mesh::tipsify(unsigned int)" member function declared in class «Mesh"|
src/entities/Mesh.h||In member function «void Mesh::tipsify(unsigned int)":|
src/entities/Mesh.h|209|erreur: «buildVBOs" was not declared in this scope|
src/BeSynthese.cpp||In member function «void BeSynthese::createScene()":|
src/BeSynthese.cpp|125|erreur: cannot allocate an object of abstract type «Mesh"|
src/entities/Mesh.h|39|note:   because the following virtual functions are pure within «Mesh":|
src/entities/Entity.h|47|note: 	virtual void Entity::drawGeometry()|
src/BeSynthese.cpp|137|erreur: no matching function for call to «HES::HalfEdgeStructure::HalfEdgeStructure(Mesh*)"|
src/halfEdges/HalfEdgeStructure.h|47|note: candidats sont: HES::HalfEdgeStructure::HalfEdgeStructure()|
src/halfEdges/HalfEdgeStructure.h|47|note:                 HES::HalfEdgeStructure::HalfEdgeStructure(const HES::HalfEdgeStructure&)|
src/BeSynthese.cpp|225|erreur: cannot allocate an object of abstract type «Mesh"|
src/entities/Mesh.h|39|note:   since type «Mesh" has pure virtual functions|
src/BeSynthese.cpp|235|erreur: cannot allocate an object of abstract type «Mesh"|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 0 warnings ===|
I have this problem since I tried to merge this HES files with the Mesh class, so I am posting the Mesh header too as it may be the problem :/ :
Code:
#ifndef _MESH_H_
#define _MESH_H_

#define _HAVE_LIB3DS_

#include "Entity.h"

#include <vector>
#include <map>

#include <QString>

#include <OpenGL.h>
#include <FastTriangleReordering.h>
#include <Timer.h>
#include <HalfEdgeStructure.h>

#include "Vertex.h"


namespace HES {
    class HalfEdgeStructure;
    class HE_Face;
    class HE_Vertex;
}


/**
    Class Mesh : defines the basis of a mesh object.
*/

class Mesh : public Entity
{
    /*! The half edge structure is intrinsicaly connected with this one */
    friend class HES::HalfEdgeStructure;
    friend class HES::HE_Face;
    friend class HES::HE_Vertex;


protected :

    /*!< vertex array with the x,y and z coordinates of the different vertices */
    std::vector<Vertex> mVertices;

    /*! Map of face arrays (faces with a same amount of vertices are regrouped when possible for performance issues)
        first parameter : number of vertices for each face
        second parameter : pointer toward a vector containing the faces corresponding to the first parameter

        NB : can't use some kind of "FaceIndex" structure as the number of indices per face is not constant
    */
    std::map<unsigned int, std::vector<unsigned int> > mFacesMap;

    /*! Does this mesh have texture coords ? */
    bool mHasTextureCoords;


    /*! For the half edge structure */
    HES::HalfEdgeStructure *hes;
    bool displayHES;


public :

    /*!
        Loads a 3DS or OFF object from a filename
        \param filename
    */
    Mesh(const QString& filename, const QString& name = "");

    virtual ~Mesh();

#ifdef _HAVE_LIB3DS_
    void load3DS(const QString& filename);
#endif
    void loadOFF(const QString& filename);


    /*! Builds the HES structure for this mesh */
    void buildHES();


    /*! Calls the tipsify function to optimize the vertex cache
        \param cacheSize : tipsify cache size, by default 24
    */
    void tipsify(unsigned int cacheSize = 24);


protected :

    /*! Draws the geometry */
    virtual void drawGeometry();

    /*! Creates the VBOs */
    virtual void buildVBOs();

    /// Identificateur OpenGL du tableau de sommet et de faces.
    GLuint mBufferId[2];
    enum mBufferName { VERTEX_ID=0, FACE_ID };

    void computeNormals(void);
    void normalize(void);


    /*! returns the pointer toward the very beginning of the vertices array */
    const float *getVerticesArrayFront() const;
    /*! returns the pointer toward the very beginning of the face array corresponding to faces with edgeNumber edges
        \param edgeNumber : number of edges of the faceArray we are interested in */
    unsigned int *getFaceArrayFront(unsigned int edgeNumber);

    /*! returns the size of the face array corresponding to faces with edgeNumber edges
        \param edgeNumber : number of edges of the faceArray we are interested in */
    unsigned int getFaceArraySize(unsigned int edgeNumber);

    /*! returns the number of vertices of this mesh */
    unsigned int getNumberOfVertices() const;

    /*! returns the raw data size of the vertex and face arrays */
    const GLsizeiptr getMVerticesRawSize() const;
    const GLsizeiptr getMFacesRawSize(unsigned int edgeNumber);

    /*! Gets and sets the attributes of a vertex : */
    Vector3 &getCoords(unsigned int index);
    Vector3 &getNormal(unsigned int index);
    void setCoords(Vector3 *myNewCoords, unsigned int index);
    void setNormal(Vector3 *myNewNormal, unsigned int index);

public :
    /*!< vertex array with the x,y and z coordinates of the different vertices */
    void addVertex(Vertex &newVertex);
    void addVertex(Vector3 &coords);
    void addVertex(Vector3 &coords, Vector3 &normal);

    void toggleDisplayHES();
};

inline const float *Mesh::getVerticesArrayFront() const {
    return mVertices[0].position.data();
}
inline unsigned int *Mesh::getFaceArrayFront(unsigned int edgeNumber) {
    return &(mFacesMap[edgeNumber][0]);
}

inline unsigned int Mesh::getFaceArraySize(unsigned int edgeNumber) {
    return mFacesMap[edgeNumber].size();
}

inline const GLsizeiptr Mesh::getMVerticesRawSize() const {
    return mVertices.size() * sizeof(Vertex);
}
inline const GLsizeiptr Mesh::getMFacesRawSize(unsigned int edgeNumber) {
    return mFacesMap[edgeNumber].size() * sizeof(unsigned int);
}


inline void Mesh::addVertex(Vertex &newVertex) {
    mVertices.push_back(newVertex);
}
inline void Mesh::addVertex(Vector3 &newVertex) {
    mVertices.push_back(newVertex);
}
inline void Mesh::addVertex(Vector3 &coords, Vector3 &normal) {
    Vertex newVertex(coords);
    newVertex.normal = normal;
    mVertices.push_back(newVertex);
}

inline unsigned int Mesh::getNumberOfVertices() const {
    return mVertices.size();
}

inline Vector3 &Mesh::getCoords(unsigned int index) {
    return mVertices[index].position;
}

inline Vector3 &Mesh::getNormal(unsigned int index) {
    return mVertices[index].normal;
}

inline void Mesh::setCoords(Vector3 *myNewCoords, unsigned int index) {
    mVertices[index].position = *myNewCoords;
}

inline void Mesh::setNormal(Vector3 *myNewNormal, unsigned int index) {
    mVertices[index].normal = *myNewNormal;
}

inline void Mesh::toggleDisplayHES() {
    displayHES = !displayHES;
}

inline void Mesh::buildHES() {
    hes = new HES::HalfEdgeStructure(this);
    hes->setCurrentHE(1);
}

inline void Mesh::tipsify(unsigned int cacheSize)
{
	std::cout << std::endl << "Tipsifying..." << std::endl;
	// Tipsify
	FastTriangleReordering::tipsify(getFaceArrayFront(3), getFaceArraySize(3), cacheSize, getNumberOfVertices());
	std::cout << "Typsify done" << std::endl;
	// updates the VBOs
	buildVBOs();
}


#endif  // _MESH_H_
Thanks again for your help
 
Old 02-27-2008, 08:33 AM   #17
dmail
Member
 
Registered: Oct 2005
Posts: 970

Rep: Reputation: Disabled
I can not see the reason for the error but if you could host the source somewhere I will look at it.
There is just a few comments about your code I would like to make
The header guard _MESH_H_ (and _HAVE_LIB3DS_)is not standard as you should not use prefixed underscores as these are reserved.

Included files
#include <FastTriangleReordering.h>
#include <Timer.h>
#include <HalfEdgeStructure.h>
would be better included like
#include "FastTriangleReordering.h"
#include "Timer.h"
#include "HalfEdgeStructure.h"
I use this to inform which is a system and which is a local file.

Why is the HES::HE_Vertex in a namespace and yet still has a wart (HE_) < this is a style question really
Also is there two Vertex types Vertex and HES::HE_Vertex?
You have added all the include paths have you not?
 
Old 02-27-2008, 11:44 AM   #18
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15
Ok, I will send you a PM asap with the sources then
(@ta0kira : I am sending a PM to you too in case you can be bothered to look into it too )

As for the code style : I usually use NAME_OF_THE_FILE_H for NameOfTheFile.h, and these _MESH_H_ / etc. are due to the fact the source code was not written by me originally (it comes from a project the teacher gave us as a base to work on).

As for the local vs global inclusion, it's open to discussion but I think it is more handy to use the global one so that you just need to change the include paths if you move something around. I still use the local one when I am sure the files won't be moving relatively to each others though

For HE_Vertex, that's an ugly tweak
The whole half edge structure comes from another project which I would like to merge with this one, and as you saw there was already a Vertex class in this one so I decided to change the name of the second, and as a second thought I decided to use a namespace to avoid name conflicts instead. The problem is that (now called) HE_Vertex is used along with Vertex in the some classes and I preferred to change the name so I won't have to write HES::Vertex too often
 
Old 02-27-2008, 07:12 PM   #19
ta0kira
Senior Member
 
Registered: Sep 2004
Distribution: FreeBSD 9.1, Kubuntu 12.10
Posts: 3,078

Rep: Reputation: Disabled
There's something wrong with the ZIP archive. It doesn't open.
ta0kira
 
Old 02-28-2008, 12:01 PM   #20
dmail
Member
 
Registered: Oct 2005
Posts: 970

Rep: Reputation: Disabled
I do not have the dependencies on the machine I am currently on, but I would say your problem is inclusion hell
file a included file b and file b includes file a.

For example HalfEdgeStructure and Mesh.
I can see more problems with the code such as HalfEdgeStructure conversion operator taking a mesh pointer when it is passed a this pointer which is constant. Then there are the warnings of which there are a good amount, some of which can be eliminated simply because they are double to float casts.
instead of float f(1.0) do
float(1.f)

Last edited by dmail; 02-28-2008 at 12:07 PM.
 
Old 02-28-2008, 01:11 PM   #21
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15
Indeed, HalfEdgeStructure appear in Mesh and vice versa. They are meant to work together very closely... But if you have ideas about how I could link them together don't hesitate to tell me :=)
This said, it worked like that in another project, the only difference being that there were no namespace at all.


Quote:
I can see more problems with the code such as HalfEdgeStructure conversion operator taking a mesh pointer when it is passed a this pointer which is constant
Do you mean the HES constructor ? (and the Mesh buildHES function ?)
I couldn't test this function since I have had these problems, but buildHES isn't a const function so the this pointer shouldn't be const, right ?


There are lots of problems I will need to work on
 
Old 02-28-2008, 05:16 PM   #22
dmail
Member
 
Registered: Oct 2005
Posts: 970

Rep: Reputation: Disabled
Quote:
Originally Posted by Shautieh View Post
Indeed, HalfEdgeStructure appear in Mesh and vice versa. They are meant to work together very closely... But if you have ideas about how I could link them together don't hesitate to tell me :=)
This said, it worked like that in another project, the only difference being that there were no namespace at all.
The easiest way is to forward declare the types in the header and include the headers in the cpp, removing any inlined code which uses the types. Or I believe ta0kira wrote a method in the thread.(I can not remember

Quote:
Do you mean the HES constructor ? (and the Mesh buildHES function ?)
I couldn't test this function since I have had these problems, but buildHES isn't a const function so the this pointer shouldn't be const, right ?
[/quote]A this pointer is always constant.
ie for struct T the this pointer is T * const, inside a constant function it is T const * const.
 
Old 02-28-2008, 05:46 PM   #23
ta0kira
Senior Member
 
Registered: Sep 2004
Distribution: FreeBSD 9.1, Kubuntu 12.10
Posts: 3,078

Rep: Reputation: Disabled
As dmail stated, I'd use forward declarations instead of a #include if you can. For one, that reduces the header's dependencies by one (not counting indirect dependencies) and in turn also those files that include it (a big deal with large projects that use makefiles.) You don't need to get rid of inlines unless they actually use the member functions of the class that's in the opposite file. Well, one can have them for the other, but not both.

As a side note, I actually have a library that uses 4-5 classes that are never defined. They're just forward-declared and the library's user defines them to what they need for the particular application they are building. In other words, you don't ever have to have the actual class definition unless you're going to access its functions or members, or instantiate it.
ta0kira
 
Old 02-28-2008, 06:06 PM   #24
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15
Ok, this seems like a good idea, and at least it will reduce compilation time
Though if I go down this road, when do you think I should stop ? Theorically I could almost never include things in header files (just forward declare, except when there is some heritage going on) and include only in the cpp, but is it good or should I aim for some kind of middle ground ?

BTW, if you know of a way to put inline methods in cpp files it would be nice. I think it's not possible for compiler and inline properties reasons, but just in case... I hate to have lots of inline methods in my headers (though not to the point of creating another header to store just that and include it in the class header :P)

Quote:
A this pointer is always constant.
ie for struct T the this pointer is T * const, inside a constant function it is T const * const.
Arf, what is the less ugly way for an object to give its address to another then ? I guess &(*this) would work but...
 
Old 02-29-2008, 06:30 PM   #25
ta0kira
Senior Member
 
Registered: Sep 2004
Distribution: FreeBSD 9.1, Kubuntu 12.10
Posts: 3,078

Rep: Reputation: Disabled
Since it's someone else's work being used as a template (that and it's a messy include situation,) I'd rewrite from scratch and paste the algorithmic portions from the example. I do that even with my own work every once in a while because eventually everything either becomes too modified to keep up with, or maintenance becomes too much of a burden to be feasible (for projects that haven't leveled out into a highly-stable version.) It's a good feeling to take something huge and messy and break it down into it's fundamental concepts and have clean, reliable code. That's generally the process I go through when taking a "working" version of a project and making it into a stable release.
ta0kira
 
Old 03-01-2008, 10:45 AM   #26
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15
Great news !
I put the includes in the cpp files and only made forward declarations in the headers for the Mesh and half edge related classes, and it works (Well, it compiles at least )

I'll put more attention to inclusion hell in the future now
Thanks a lot to you two

@ta0kira : I redo things I dislike on the fly, and it's good enough in general so I don't want to recode it all from scratch
 
Old 05-02-2008, 02:08 AM   #27
choissac
LQ Newbie
 
Registered: May 2008
Posts: 1

Rep: Reputation: 0
Wink

Quote:
Originally Posted by Shautieh View Post
Great news !
I put the includes in the cpp files and only made forward declarations in the headers for the Mesh and half edge related classes, and it works (Well, it compiles at least )

I'll put more attention to inclusion hell in the future now
Thanks a lot to you two

@ta0kira : I redo things I dislike on the fly, and it's good enough in general so I don't want to recode it all from scratch
Hey.. I want to get that cpp file. if you have a whole project, can I get that ? I really want to get that for my private studying. if you can please contact me by choissac@gmail.com Thank you!!
 
Old 05-21-2008, 03:09 AM   #28
Shautieh
Member
 
Registered: Sep 2006
Distribution: Ubuntu
Posts: 64

Original Poster
Rep: Reputation: 15
What files would you be interested in exactly ?
I'd rather answer whatever question you might have though, as there is not much point to get something already done if you want to learn it.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
C++ templated Node class: pointers to different instantated class types jhwilliams Programming 3 08-20-2007 06:20 PM
Identify class type Ephracis Programming 1 05-05-2007 09:03 AM
Does derivated class inherit base class destructor (constructor)? kornerr Programming 2 08-23-2006 08:05 AM
Which C++ editor in Linux has the class view/class browser feature imaginationworks Programming 7 05-21-2006 11:09 PM
c++ list class, type of node? exodist Programming 2 05-20-2004 06:27 PM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 09:12 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration