Kesalahan Kompilasi Kelas Templat C++: deklarator init yang diharapkan sebelum token '‹'

Saya sedang mempelajari template dalam c++ dan menurut tutorial ini: http://www.cprogramming.com/tutorial/templates.html

saya membuat kelas CalcTempl.h

#ifndef CALC_TEMPL_H
#define CALC_TEMPL_H

template <class A_Type> class CalcTempl
{
  public:
    A_Type multiply(A_Type x, A_Type y);
    A_Type add(A_Type x, A_Type y);
};

template <class A_Type> A_Type calc<A_Type>::multiply(A_Type x,A_Type y)
{
  return x*y;
}
template <class A_Type> A_Type calc<A_Type>::add(A_Type x, A_Type y)
{
  return x+y;
}

#endif

dan main.cpp

#include <iostream>
#include "CalcTempl.h"

using namespace std;

int main(){

  CalcTempl<double> c2;

  double d1 = 5;
  double d2 = 4;

  double c2r1 = c2.add(d1, d2);

  cout << " C2 Result: " << c2r1 << "\n";

  return 0;
}

saat kompilasi (g++ main.cpp -o ttest) saya mendapat kesalahan ini:

CalcTempl.h:11: error: expected init-declarator before '<' token
CalcTempl.h:11: error: expected `;' before '<' token
CalcTempl.h:15: error: expected init-declarator before '<' token
CalcTempl.h:15: error: expected `;' before '<' token

Saya tidak dapat menemukan apa yang salah


person user2479113    schedule 13.06.2013    source sumber


Jawaban (1)


Kelas Anda disebut CalcTempl, tetapi pada saat Anda mengimplementasikan anggotanya, Anda mencoba menyebutnya sebagai calc. Itu tidak bisa.

person Sebastian Redl    schedule 13.06.2013
comment
terima kasih, kesalahan yang bodoh! Saya pikir keluaran kompiler menempatkan saya pada jalan yang salah. - person user2479113; 13.06.2013
comment
Ya, kesalahan templat bisa membingungkan. Coba gunakan Dentang daripada GCC, biasanya pesan kesalahannya lebih baik. Atau tingkatkan GCC Anda ke 4.8, yang juga mengalami peningkatan besar. Ngomong-ngomong, jika sebuah jawaban memecahkan masalah Anda, silakan klik tanda centang di bawah pilihan untuk menandainya sebagai diterima. - person Sebastian Redl; 13.06.2013
comment
@SebastianRedl Bisakah Anda menjelaskan apa yang dimaksud dengan init-declarator? - person VINOTH ENERGETIC; 06.04.2017
comment
@VINOTHENERGETIC Ini adalah istilah dari tata bahasa standar C++, dan secara kasar berarti bagian dari deklarasi setelah tipe awal dan pengubah, termasuk penginisialisasi jika ada. - person Sebastian Redl; 06.04.2017
comment
@sebastian Redi apa yang dimaksud dengan tipe awal di sini? - person VINOTH ENERGETIC; 06.04.2017
comment
@VINOTHENERGETIC Ini adalah konstruksi yang agak dibuat-buat berdasarkan cara penulisan tata bahasa. Tipe sebenarnya, const, volatil, statis, dll di sekitarnya, itulah decl-specifier-seq. Deklarasi lengkap terdiri dari decl-specifier-seq diikuti oleh init-deklarator. Untuk programmer C++ normal (yaitu seseorang yang tidak mengimplementasikan kompiler) bahkan tidak perlu mengetahui keberadaan hal-hal ini, jika bukan karena pesan kesalahan yang salah paham yang menyertakan istilah-istilah ini. - person Sebastian Redl; 06.04.2017
comment
@sebastin Mengerti. - person VINOTH ENERGETIC; 07.04.2017