每次我向抽象类添加一个非具体的虚方法时,编译器会对从该抽象类派生的所有类提供无用的错误invalid new-expression of abstract class type '...'
,然后我需要执行git diff
搜索我之前添加的新方法,或查找GCC错误中的注释。 (添加方法和编译之间可能存在天差异)
我可以在C ++中指定一个类必须是具体的(如果它没有告诉cause / missing方法)?
答案 0 :(得分:2)
回答手头的问题:
我可以在C ++中指定一个类必须是具体的(如果它没有告诉cause / missing方法)?
C ++没有明确的抽象或具体的类。这些概念隐含在语言中。 Abstract 由一个或多个纯虚拟成员函数的存在(在类本身或继承中)隐含,而具体由于缺少这些函数而隐含。
这正是C ++标准定义抽象类(§13.4/ 2)的方式
[class.abstract]
抽象类是一个只能用作其他类的基类的类;除了作为派生自它的类的子对象之外,不能创建抽象类的任何对象。 如果一个类至少有一个纯虚函数,则该类是抽象的。
例如,在C ++中没有像Java ;WITH x AS
(
SELECT ENTRY_DATE, ID, PRICE,
RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ENTRY_DATE DESC)
FROM TableName
WHERE '20100105' <= ENTRY_DATE
)
SELECT ENTRY_DATE, ID, PRICE
FROM x
WHERE RN = 1
UNION
SELECT a.ENTRY_DATE, a.ID, a.PRICE
FROM
(
SELECT ENTRY_DATE, ID, PRICE,
RN = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ENTRY_DATE DESC)
FROM TableName
) a
LEFT JOIN x ON a.ID = x.ID
WHERE a.RN = 1
AND x.ID IS NULL
这样的关键字。
编译器错误消息是您可以捕获错误的标准位置,例如尝试实例化仍具有纯虚拟成员函数的类。