Tôi khá mới đối với C++ và trang web này nên có ràng buộc là lỗi. Khi tôi cố gắng biên dịch mã của tôi, tôi nhận được lỗi như error: missing template argument before 'b'
. Tôi đã tìm kiếm thế giới cho câu trả lời trong nhiều giờ và nó đã dẫn tôi đến đây."Đối số mẫu thiếu" nghĩa là gì?
Nhiệm vụ của tôi là triển khai Bộ sưu tập lớp theo khuôn mẫu lưu trữ bộ sưu tập gồm Đối tượng sử dụng mảng, dọc theo với kích thước hiện tại của bộ sưu tập.
#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;
}
Chào mừng bạn đến với SO. Đây là một câu hỏi đầu tiên khá tốt, nhưng trong tương lai, hãy thử chỉ đăng một bộ mã tối thiểu mà vẫn trưng bày vấn đề. Trong trường hợp này, chúng ta không cần phải đọc toàn bộ nội dung của mẫu lớp 'collection' để tìm ra cái gì sai. Thông thường, tôi nghĩ rằng bạn sẽ thấy rằng việc thực hiện việc giảm thiểu mã trong câu hỏi của bạn sẽ dẫn bạn đến câu trả lời trước khi bạn đăng nó! :-) –
Tom, Mat và Bojan là tất cả các quyền về câu hỏi ngay lập tức của bạn. Khi bạn đã sửa lỗi đó, bạn sẽ gặp vấn đề với tệp thứ ba đó: để khởi tạo đối tượng 'collection' trong 'main', trình biên dịch sẽ cần xem hàm tạo. Nếu đó là trong một tập tin riêng biệt, nó sẽ không hoạt động. Thông thường bạn chỉ cần thoát khỏi triển khai trong phần đầu, nhưng nếu không, bạn có thể phải '# include' tệp thứ ba thay vì biên dịch nó bình thường. –
Useless