ข้อผิดพลาดในการรวบรวมคลาสเทมเพลต C ++: init-declarator ที่คาดไว้ก่อนโทเค็น '‹'

ฉันกำลังศึกษาเทมเพลตใน c++ และตามบทช่วยสอนนี้: http://www.cprogramming.com/tutorial/templates.html

ฉันสร้างคลาส 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

และ 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;
}

ในการคอมไพล์ (g++ main.cpp -o ttest) ฉันได้รับข้อผิดพลาดนี้:

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

ฉันไม่พบสิ่งผิดปกติ


person user2479113    schedule 13.06.2013    source แหล่งที่มา


คำตอบ (1)


คลาสของคุณชื่อ CalcTempl แต่เมื่อถึงจุดที่คุณนำสมาชิกไปใช้ คุณพยายามเรียกคลาสนั้นว่า calc นั่นใช้ไม่ได้

person Sebastian Redl    schedule 13.06.2013
comment
ขอบคุณ ช่างเป็นข้อผิดพลาดที่โง่เขลา! ฉันคิดว่าเอาต์พุตของคอมไพเลอร์ทำให้ฉันผิดทาง - person user2479113; 13.06.2013
comment
ใช่ ข้อผิดพลาดของเทมเพลตอาจทำให้สับสนได้ ลองใช้ Clang แทน GCC โดยปกติจะมีข้อความแสดงข้อผิดพลาดที่ดีกว่า หรืออัปเกรด GCC ของคุณเป็น 4.8 ซึ่งมีการปรับปรุงที่ยอดเยี่ยมเช่นกัน อย่างไรก็ตาม หากคำตอบสามารถแก้ไขปัญหาของคุณได้ โปรดคลิกเครื่องหมายถูกใต้การโหวตเพื่อทำเครื่องหมายว่ายอมรับแล้ว - person Sebastian Redl; 13.06.2013
comment
@SebastianRedl คุณช่วยอธิบายได้ไหมว่า init-declarator หมายถึงอะไร? - person VINOTH ENERGETIC; 06.04.2017
comment
@VINOTHENERGETIC มันเป็นคำศัพท์จากไวยากรณ์มาตรฐาน C ++ และหมายถึงส่วนหนึ่งของการประกาศอย่างคร่าว ๆ หลังจากประเภทเริ่มต้นและตัวดัดแปลงรวมถึงตัวเริ่มต้นหากมีอยู่ - person Sebastian Redl; 06.04.2017
comment
@sebastian Redi คุณหมายถึงอะไรโดยพิมพ์เริ่มต้นที่นี่? - person VINOTH ENERGETIC; 06.04.2017
comment
@VINOTHENERGETIC มันเป็นโครงสร้างที่ค่อนข้างประดิษฐ์ขึ้นอยู่กับวิธีการเขียนไวยากรณ์ ประเภทจริง, const ใด ๆ, ระเหย, คงที่ ฯลฯ ที่อยู่รอบ ๆ สิ่งเหล่านี้คือ decl-specifier-seq การประกาศแบบเต็มประกอบด้วย decl-specifier-seq ตามด้วย init-declarator สำหรับโปรแกรมเมอร์ C++ ทั่วไป (เช่น คนที่ไม่ได้ใช้คอมไพเลอร์) ก็ไม่จำเป็นที่จะต้องรู้ว่าสิ่งเหล่านี้มีอยู่จริง ถ้าไม่ใช่เพราะข้อความแสดงข้อผิดพลาดที่คิดไม่ดีซึ่งมีเงื่อนไขเหล่านี้อยู่ด้วย - person Sebastian Redl; 06.04.2017
comment
@เซบาสติน เข้าใจแล้ว - person VINOTH ENERGETIC; 07.04.2017