我正在使用安装了Productivity Power Tools扩展的Visual Studio 2013.
除了在错误列表中报告之外,我是否可以进行设置以便在编辑器中标记C++编译错误(使用波浪线下划线,滚动条标记等)?
目前,编辑器中仅显示IntelliSense错误.
我试过去"滚动条"选项,并确保选中"显示错误",但这没有任何帮助.
我有以下代码的问题:
class MainWindow
{
...
private:
bool CreateWindow(std::string, int, int, int, bool);
...
}
Run Code Online (Sandbox Code Playgroud)
和
bool MainWindow::CreateWindow(std::string title, int width, int height,
int bits, bool fullscreen)
{
...
Run Code Online (Sandbox Code Playgroud)
Visual Studio突出显示方法定义,并显示以下错误:
int reateWindow(std::string title, int width, int height, int bits, bool fullscreen)
Error: class "MainWindow" has no member called "CreateWindowExW"
Run Code Online (Sandbox Code Playgroud)
并且编译器输出以下内容:
warning C4003: not enough actual parameters for macro 'CreateWindowW'
error C2039: 'CreateWindowExW' : is not a member of 'MainWindow'
Run Code Online (Sandbox Code Playgroud)
我注意到如果我将方法名称更改为其他名称,那么不会以大写字母C开头,错误就会消失.我是Windows开发的新手.是什么赋予了?
和大家圣诞快乐!
我正在学习静态多态性,并且正在阅读Andrei Alexandrescu关于基于策略的设计的出色著作。我在代码中遇到了以下内容:我有一个接口Interface,指定Foo必须存在该方法。该接口将由class实现Impl。我有以下两种选择:
1)动态多态
class Interface {
public:
virtual void Foo() = 0;
}
class Impl : public Interface {
public:
void Foo() {};
}
Run Code Online (Sandbox Code Playgroud)
2)静态多态
class Impl {
{
public:
void Foo() {};
}
template <class I>
class Interface : public I
{
public:
void Foo() { I::Foo(); } //not actually needed
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用静态多态性有意义吗?与第一种方法相比,第二种方法有什么好处吗?该接口仅指定了某些方法的存在,并且其机制对于不同的实现是相同的-因此与书中描述的情况不太一样,因此我觉得我可能只是在使事情变得过于复杂。
更新:我在运行时不需要多态行为;在编译时已知正确的实现。
c++ polymorphism templates policy-based-design static-polymorphism
据我所知,RAII习惯应用于类所需的资源(如果我错了请纠正我),需要资源的类应该定义一个合适类型的成员,并且它的析构函数将被自动调用当使用类实例被销毁时,如下所示:
class Skybox
{
public:
Skybox() : tex_(...) {}
private:
Texture tex_;
};
Run Code Online (Sandbox Code Playgroud)
除了使用智能指针在堆上分配资源之外,如果资源成员Skybox在资源初始化之前需要在构造函数中执行某些代码,那么如何应用此模式?例如:
class Skybox
{
public:
Skybox(const std::string& fileName);
private:
Texture tex_;
}
Skybox::Skybox(const std::string& fileName)
{
// read stuff from skybox initialization file
// including various texture parameters such as texture file
...
// initialize tex_ based on information read above
}
Run Code Online (Sandbox Code Playgroud)
更新:Texture该类要求在其构造函数中执行所有初始化(即没有Texture::Init()方法可用)
我在代码中看到了这两种方法.你能解释两者之间有什么区别吗?我认为它与C++完成名称空间查找的方式有关,你是否可以提供一些关于此的信息,或者可能是一个好的doc的链接?谢谢.
我是一个旨在跨平台的程序; 因此,它将支持某些操作的多个实现.我的第一个想法是编写一个类的层次结构,具有一个通用接口,可能是每个平台的抽象工厂.
class Operation {
DoOperation() = 0;
}
class OperationPlatform1 : public Operation {
DoOperation();
}
class OperationPlatform2 : public Operation {
DoOperation();
}
#ifdef USING_PLATFORM1
Operation *op = new OperationPlatform1;
#endif
Run Code Online (Sandbox Code Playgroud)
但是,我意识到将在编译时使用将要使用的实现.我试着想一想如何使用静态多态实现这一点,之后我意识到我也可以按照这些方式写一些东西:
class OperationPlatform1 {
DoOperation();
}
class OperationPlatform2 {
DoOperation();
}
#ifdef USING_PLATFORM1
typedef OperationPlatform1 Operation;
#endif
Operation op;
Run Code Online (Sandbox Code Playgroud)
抽象多个实现的好方法是什么,其中只有一个在编译时被选中?我也对性能感兴趣,所以除非必须,否则我不想使用虚拟方法.
鉴于以下内容:
class ParamClass {...};
class MyObject {
public:
void myMethod(ParamClass const& param) { _myPrivate = param; }
private:
ParamClass _myPrivate;
}
[...]
MyObject obj;
void some_function(void)
{
ParamClass p(...);
obj.myMethod(p);
}
Run Code Online (Sandbox Code Playgroud)
在对象p的生命周期结束时_myPrivate会发生什么?编辑:我仍然可以使用_myPrivate访问对象p的副本吗?
谢谢!
担
我有以下内容:
class Abstract
{
virtual void AbstractMethod() = 0;
};
class Implementer
{
void AbstractMethod() {};
};
class Concrete : public Abstract, private Implementer
{};
Run Code Online (Sandbox Code Playgroud)
我无法实例化,Concrete因为AbstractMethod不会覆盖纯虚方法.我究竟做错了什么?
c++ inheritance multiple-inheritance pure-virtual private-inheritance
我想在我的程序中创建一个树结构.现在我有类似于以下内容:
class tree_node
{
public:
tree_node (tree_node* parent) : parent_(parent)
{
parent_.add_child(this);
}
private:
std::vector<tree_node*> children_;
tree_node* parent_;
}
Run Code Online (Sandbox Code Playgroud)
我对这个设计的主要关注是tree_node该类可以删除它的任何子节点和父节点.我想改变设计以禁止这种情况.所以:
tree_node课堂上删除孩子/父母吗?欢迎任何其他实现我的目标的想法.
是否可以限制可以实例化模板的类型(即,如果我使用,则会出现编译器错误template<type_not_allowed>)?
c++ ×10
templates ×2
abstraction ×1
generics ×1
idioms ×1
inheritance ×1
namespaces ×1
nested ×1
pointers ×1
polymorphism ×1
pure-virtual ×1
raii ×1
reference ×1
tree ×1
visual-c++ ×1
windows ×1