בעייה של מתחילים בC++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בעייה של מתחילים בC++


Mazumotte

Recommended Posts

שלום לכולם.

התחלתי ממש לא מזמן לתכנת בC++ ורציתי לנסות לבנות מערך "מוגן" בעזרת טמפלטים וכד'.

הבעיה שלי היא שאני מקבל את השגיאות הנ"ל:

Error 2 error LNK2019: unresolved external symbol "public: __thiscall PArray<int>::~PArray<int>(void)" (??1?$PArray@H@@QAE@XZ) referenced in function _main main.obj

Error 3 error LNK2019: unresolved external symbol "public: __thiscall PArray<int>::PArray<int>(int)" (??0?$PArray@H@@QAE@H@Z) referenced in function _main main.obj

אין לי מושג מאין הן נובעות, שכן ממימשתי את כל מה שהגדרתי:


template <class T>
class PArray
{
public:
PArray<T> (int size);
~PArray<T> ();
int GetSize();
T * operator[] (int index);
PArray<T> operator+ (int n);
PArray<T> operator- (int n);
PArray<T> operator-- ();
PArray<T> operator++ ();
PArray<T> operator+= (int n);
PArray<T> operator-= (int n);

private:
int size;
int offset;
T m_PArray [1];
};

#include <stdio.h>
#include "PArray.h"

template <class T>
PArray<T>::PArray( int size )
{
m_PArray = new <T> [size];
this -> size = size;
this -> offset = 0;
}
template <class T>
PArray<T>::~PArray()
{
delete(m_PArray);
}
template <class T>
int PArray<T>::GetSize()
{
return this->size;
}
template <class T>
T * PArray<T>::operator[] (int index)
{
int total_off = index + offset
if((index >= 0) &&(index < this->size))
return this->m_PArray+index+offset;
else throw -1;
}
template <class T>
PArray<T> PArray<T>::operator+ (int n)
{
offset += n;
return this;
}
template <class T>
PArray<T> PArray<T>::operator- (int n)
{
offset -= n;
return this;
}
template <class T>
PArray<T> PArray<T>::operator-- ()
{
return this-1;
}
template <class T>
PArray<T> PArray<T>::operator++ ()
{
return this+1;
}
template <class T>
PArray<T> PArray<T>::operator+= (int n)
{
return this+n;
}
template <class T>
PArray<T> PArray<T>::operator-= (int n)
{
return this-n;
}

בפונקציית main קיימת רק בנייה של האובייקט

PArray<int> a(5)

אם למישהו יש רעיון אשמח לעזרה.

תודה :)

קישור לתוכן
שתף באתרים אחרים

נתחיל מזה שיש לך שגיאות חמורות בקוד של PArray. טיפ קטן - קודם כל תנסה לעשות את כל העסק בלי טמפלייטים בכלל (כלומר, נניח ש-PArray הוא תמיד מערך של int) ואז תוסיף את התמיכה בטמפלייטים.

חוץ מזה, הפתרון לבעיה הספציפית שלך מוסבר כאן:

http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15

קישור לתוכן
שתף באתרים אחרים

שאלה קטנה אחרת - שיניתי את הדוגמא כמו שאמרתי, למערך מוגן של int.

עכשיו כשאני מגדיר טיפוס מסוג המערך(a לצורך העניין) ועושה

++a

הואנכנס לפונקציה המתאימה, עושה את הפעולה הנכונה, אך לאחר שהוא מחזיר את הערך הוא פונה ל dctor.... למה זה?

קישור לתוכן
שתף באתרים אחרים

אתה מצפה שאני אדע איך מימשת? תעלה את הקוד הרלוונטי אחרי התיקון.

הערה קטנה: ברוב המקרים לא צריך בכלל להשתמש ב-this. אפשר לגשת לאיברים של מחלקה פשוט ע"י שימוש בשם שלהם.

עוד הערה: יש לך בלבול בין המשמעות של +operator ו =+operator (ועם שאר האופרטורים בהתאם), וטיפוסי ההחזרה שלהם לא נכונים.

קישור לתוכן
שתף באתרים אחרים

פתרתי את הבעיה, הדוגמא עובדת מעולה גם עם טמפלטים :)

תודה לכל העוזרים, למרות שעדיין לא הבנתי סופית למה הקומפלייר לא מצליח לעשות לינק בין הקבצים(לא היה הסבר בנוגע לסיבה, אלא רק בנוגע לפתרון הבעיה בלינק)

אם יש קישור להסבר או אם מישהו מרגיש נדיב ויסביר לי אני אשמח מאד

תודה רבה על העזרה :)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...