freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Δημιουργία αρχείων header


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα]      Bookmarks Tags: δημιουργία Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 30 Νοε 2008 23:59    Θέμα: Δημιουργία αρχείων header Απάντηση με παράθεση  Mark this post and the followings unread

Καταρχήν χαιρετώ άπαντες...

έχω το εξής πρόβλημα

θέλω τα παρακάτω source files:

κώδικας:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct node
{
    char name[20];
    int cCnt;
    int timeSum;
    struct lnode *root;
    struct lnode *current;
   
    struct node *right;
    struct node *left;     
};

void insertNode(struct node **root,struct node *newNode);
void display(struct node *p);
struct node * find(struct node *p,char key[]);

void insertNode(struct node **root,struct node *newNode)
{
    if((*root) == NULL)
    {
             *root = newNode;
             return;   
    }
    if(newNode->name < (*root)->name)
    {
             insertNode(&(*root)->left,newNode);       
    }
    else
    {
             insertNode(&(*root)->right,newNode);
    }
}

void display(struct node *p)
{
    if(p->left) display(p->left);
    printf("%s\n",p->name);
    if(p->right) display(p->right);
}

struct node * find(struct node *p,char key[])
{
   struct node *current;
   
   current =  p;   
   
   while(current->name != key)
   {
             if(key < current->name) current = current->left;
             else current = current-> right;
             if(current == NULL) return NULL;         
   }
   return current;
}


και

κώδικας:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct lNode
{
    char date[10];
    char time[8];
    char cTime[8];
    char terminal[20];
   
    struct lNode *next;
};

typedef struct lNode *pList;

void insert(pList *p,char date[])
{
    pList temp;
    temp = *p;
    *p = (pList) malloc(sizeof(pList));
    strcpy((*p)->date,date);
    (*p)->next = temp;
    return;
}

void print(pList p)
{
    while (p != NULL)
    {
             printf("%s\n",p->date);
             p = p->next;
    }
    return;
}

int deleteNode(pList *p,char key[])
{
    pList temp;     
   
    while((*p) != NULL)
    {
             if(strcmp((*p)->date,key) == 0)
             {
                       temp = *p;
                       *p = (*p)->next;
                       free(temp);
                       return 1;                       
             } 
             else
             {
                       p = &((*p)->next);
             }

    }
    return 0;
}


να τα κάνω include στο source που είναι η main, μήπως μπορεί να με βοηθήσει κάποιος?
Thanx in advance
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 01 Δεκ 2008 01:35    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Αυτό που πρέπει να κάνεις είναι δύο πράγματα:
1) Να ξεχωρίσεις τις δηλώσεις (μεταβλητών, συναρτήσεων, δομών δεδομένων, ...) από την υλοποίηση βάζοντας τις δηλώσεις σε άλλο αρχείο (.h) από αυτό που έχεις την υλοποίηση (.c ή .cpp)

2) Στα αρχεία που κάνεις την υλοποίηση των συναρτήσεων αλλά και στα αρχεία που θέλεις να χρησιμοποιήσεις δομές δεδομένων ή συναρτήσεις που υλοποιούνται αλλού να κάνεις include το αντίστοιχο header file (.h)

Το πρώτο αρχείο σου θα σπάσει σε header1.h και source1.c (βάλε καλύτερα ονόματα που να δείχνουν ότι υπάρχει σχέση ανάμεσα στα δύο αρχεία π.χ. timetree.h και timetree.c)
κώδικας:
//header1.h
struct node
{
    char name[20];
    int cCnt;
    int timeSum;
    struct lnode *root;
    struct lnode *current;
   
    struct node *right;
    struct node *left;     
};

void insertNode(struct node **root,struct node *newNode);
void display(struct node *p);
struct node * find(struct node *p,char key[]);

κώδικας:
//source1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "header1.h" //Κάνει include το header1.h για να ξέρει τις δηλώσεις των functions.

void insertNode(struct node **root,struct node *newNode)
{
    if((*root) == NULL)
    {
             *root = newNode;
             return;   
    }
    if(newNode->name < (*root)->name)
    {
             insertNode(&(*root)->left,newNode);       
    }
    else
    {
             insertNode(&(*root)->right,newNode);
    }
}

void display(struct node *p)
{
    if(p->left) display(p->left);
    printf("%s\n",p->name);
    if(p->right) display(p->right);
}

struct node * find(struct node *p,char key [])
{
   struct node *current;
   
   current =  p;   
   
   while(current->name != key)
   {
             if(key < current->name) current = current->left;
             else current = current-> right;
             if(current == NULL) return NULL;         
   }
   return current;
}

Αντίστοιχα το 2ο αρχείο σου θα σπάσει σε header2.h και source2.c
κώδικας:
//header2.h
struct lNode
{
    char date[10];
    char time[8];
    char cTime[8];
    char terminal[20];
   
    struct lNode *next;
};

typedef struct lNode *pList;

void insert(pList *p,char date[]);
void print(pList p);
int deleteNode(pList *p,char key[]);

κώδικας:
//source2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "header2.h"

void insert(pList *p,char date[])
{
    pList temp;
    temp = *p;
    *p = (pList) malloc(sizeof(pList));
    strcpy((*p)->date,date);
    (*p)->next = temp;
    return;
}

void print(pList p)
{
    while (p != NULL)
    {
             printf("%s\n",p->date);
             p = p->next;
    }
    return;
}

int deleteNode(pList *p,char key[])
{
    pList temp;     
   
    while((*p) != NULL)
    {
             if(strcmp((*p)->date,key) == 0)
             {
                       temp = *p;
                       *p = (*p)->next;
                       free(temp);
                       return 1;                       
             } 
             else
             {
                       p = &((*p)->next);
             }

    }
    return 0;
}

Τώρα το μόνο που μένει είναι να κάνεις include αυτά τα 2 header files στο αρχείο που έχεις την main.
κώδικας:
//main.c
#include ...

#include "header1.h"
#include "header2.h"

int main(int argc, char** argv)
{
   ...
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 01 Δεκ 2008 23:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Να 'σαι καλά και πάλι
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 28 Δεκ 2009 16:45    Θέμα: Header file C++ Απάντηση με παράθεση  Mark this post and the followings unread

Λοιπόν, έχω ένα πρόβληματάκι με τα header files. Έχω ένα απλό header alex1.h με τις εξής δηλώσεις:

κώδικας:
#ifndef ALEX1_H
#define ALEX1_H

class point{
      int x;
      int y;
public:
       point();
       point(int ,int );
       void set_x(int );
       void set_y(int );
       int get_x();
       int get_y();
};

#endif


και στη συνέχεια δημιουργώ ένα άλλο αρχείο alex1.cpp (πρέπει να το κάνω compile? μου βγάζει πρόβλημα σύνδεσης λόγω μη ύπαρξης main()):

κώδικας:
#include <iostream>
#include <iomanip>
#include "alex1.h"

using namespace std;

point::point(){
   x=0;
   y=0;
}

point::point(int x,int y){
   this->x=x;
   this->y=y;
}

void point::set_x(int x){
   this->x=x;
   return;
}

void point::set_y(int y){
   this->y=y;
}

int point::get_x(){
   return x;
}

int point::get_y(){
   return y;
}


και στη συνέχεια δημιουργώ το πρόγραμμα μου main.cpp ως εξής:

κώδικας:
#include <iostream>
#include <iomanip>
#include "alex1.h"

using namespace std;

int main(){
    point p1;
    point p2(3,4);
    cout << "(" << p1.get_x() << "," << p1.get_y() << ")" << endl;
    cout << "(" << p2.get_x() << "," << p2.get_y() << ")" << endl;
    system("pause");
    return 0;
}


και δεν μου κάνει compile!!! μου βγάζει πρόβλημα για: undefined references στις συναρτήσεις μέλη της κλάσης μου.. δηλαδή όπως το βλέπω το πρόβλημα μου είναι στο δεύτερο αρχείο μου. Κάποιος βοήθεια... χρησιμοποιώ dev-cpp.

_________________
while(!dead()) ++knowledge;
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 29 Δεκ 2009 00:24    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Τα έχεις βάλει στο ίδιο project? Αν όχι, πρέπει να φτιάξεις μόνος σου το makefile.
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 29 Δεκ 2009 12:23    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

ωραίος..δεν το έκανα σε ίδιο έργο. Να ρωτήσω και κάτι άλλο...για να δημιουργώ σκέτες βιβλιοθήκες θα πρέπει στο ίδιο έργο να προσθέτω και ένα main.cpp που να κάνει κάποια εφαρμογή τους? φαντάζομαι όχι,ε?

_________________
while(!dead()) ++knowledge;
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 29 Δεκ 2009 15:01    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Βιβλιοθήκες μπορείς να έχεις 2 ειδών. Τις στατικές (.lib) και τις δυναμικές (.dll - χρειάζονται τη dllmain).
Tη main() την χρειάζεται η εφαρμογή σου (.exe).
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 04 Δεκ 2016 08:06 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos