मैं सी ++ के लिए काफी नया हूं और यह साइट इसलिए त्रुटियों के लिए बाध्य हैं। जब मैं अपना कोड संकलित करने का प्रयास करता हूं तो मुझे error: missing template argument before 'b'
जैसी त्रुटियां मिलती हैं। मैं घंटों के जवाब के लिए दुनिया की खोज कर रहा हूं और उसने मुझे यहां ले जाया है।"अनुपलब्ध टेम्पलेट तर्क" का क्या अर्थ है?
मेरा असाइनमेंट एक टेम्पलेटेड क्लास संग्रह को कार्यान्वित करना है जो संग्रह के वर्तमान आकार के साथ के साथ ऑब्जेक्ट का उपयोग करने वाले ऑब्जेक्ट्स का संग्रह करता है।
#include <iostream>
#include "collection.h"
using namespace std; v
int main(int argc, char* argv[])
{
collection b; //<----error missing template argument before 'b'
return 0;
}
#ifndef COLLECTION_H
#define COLLECTION_H
#include <iostream>
template <typename obj>
class collection
{
public:
collection();
bool isEmpty() const;
void makeEmpty();
void insert(obj val);
void remove(obj val);
bool contains(obj val) const;
private:
size_t size;
obj* col[];
};
#endif
#include "collection.h"
template <typename obj>
collection<obj>::collection() :size(10)
{
col = new obj*[size];
}
template <typename obj>
bool collection<obj>::isEmpty() const
{
for(size_t k = 0; k < size; k++)
{
if(col[k] != NULL)
return false;
}
return true;
}
template <typename obj>
void collection<obj>::makeEmpty()
{
for(size_t k = 0; k < size; k++)
{
col[k] = NULL;
}
}
template <typename obj>
void collection<obj>::insert(obj val)
{
int temp = 0;
for(size_t s = 0; s < size; s++)
{
if(col[s] != NULL)
temp++;
}
if(temp >= size)
{
obj* temp = new obj*[size*2];
for(size_t c = 0; c < size; c++)
temp[c] = col[c];
delete col;
col = temp;
}
else
col[temp] = val;
}
template <typename obj>
void collection<obj>::remove(obj val)
{
for(size_t x = 0; x < size; x++)
{
if (col[x] == val)
{
for(size_t y = x; y < size-1; y++)
{
col[y] = col[y+1];
}
col[size-1] = NULL;
return;
}
}
}
template <typename obj>
bool collection<obj>::contains(obj val) const
{
for(size_t z = 0; z < size; z++)
{
if(col[z] == val)
return true;
}
return false;
}
SO में आपका स्वागत है। यह एक बहुत अच्छा पहला सवाल है, लेकिन भविष्य में कृपया केवल एक न्यूनतम कोड पोस्ट करने का प्रयास करें जो अभी भी समस्या को प्रदर्शित करता है। इस मामले में, हमें यह पता लगाने के लिए 'संग्रह' वर्ग टेम्पलेट की संपूर्ण सामग्री को पढ़ने की आवश्यकता नहीं थी कि क्या गलत था। अक्सर, मुझे लगता है कि आप पाएंगे कि आपके प्रश्न में कोड को कम करने के काम के माध्यम से आपको पोस्ट करने से पहले जवाब मिल जाएगा! :-) –
टॉम, मैट और बोजन आपके तत्काल प्रश्न के बारे में बिल्कुल सही हैं। एक बार जब आप इसे ठीक कर लेंगे, तो आपको उस तीसरे फ़ाइल में कोई समस्या होगी: 'संग्रह' ऑब्जेक्ट को 'मुख्य' में तुरंत चालू करने के लिए, कंपाइलर को कन्स्ट्रक्टर को देखने की आवश्यकता होगी। अगर यह एक अलग फ़ाइल में है, तो यह काम नहीं करेगा। हेडर में कार्यान्वयन को छोड़ना आम बात है, लेकिन यदि आप नहीं करते हैं, तो आपको इसे सामान्य रूप से संकलित करने की बजाय तीसरी फ़ाइल को # शामिल करना पड़ सकता है। –
Useless