我得到一个编译错误,我有点困惑.这是在VS2003上.
错误C2248:'A :: y':无法访问在类'A'中声明的受保护成员
class A
{
public:
A() : x(0), y(0) {}
protected:
int x;
int y;
};
class B : public A
{
public:
B() : A(), z(0) {}
B(const A& item) : A(), z(1) { x = item.y;}
private:
int z;
};
Run Code Online (Sandbox Code Playgroud)
问题是x = item.y;
访问权限被指定为受保护.为什么B类的构造函数不能访问A :: y?
我是OData的新手,所以请耐心等待.
假设我正在使用带有OData的IQueryable <>,并且服务器生成的记录数量很大(比如10000),是否可以在客户端继续到达时开始处理实体(在整个HTTP流之前有已收到)?
我想到的概念类似于使用LINQ和SqlDataReader(详细信息),其中数据是从SQL(通过连接到SqlDataReader的基础服务器端游标)获取的,只有在LINQ2SQL提供程序枚举记录时才会这样.
HTTP确实允许流式传输.OData IQueryable <>可以利用这种支持吗?如果可以实现端到端流,则将在服务器上枚举数据并且一次一个记录地流(到序列化)到HTTP流中.当流被客户端接收并反序列化时,可以枚举实体并一次一个地到达.
这是一厢情愿的想法吗?
我正在研究RAD Studio 2007中的一个项目,使用c ++中的VCL类.
TDBLookupControl是VCL的一部分,并且有一些不良行为,这是由使用内部变量引起的 SearchTickCount
var
SearchTickCount: Integer = 0; //file scope in DBCtrls.pas
procedure TDBLookupControl.ProcessSearchKey(Key: Char);
var
TickCount: Integer;
S: string;
begin
//some code removed for brevity
TickCount := GetTickCount;
if TickCount - SearchTickCount > 2000 then SearchText := '';
SearchTickCount := TickCount;
//some code removed for brevity
end;
Run Code Online (Sandbox Code Playgroud)
但是,SearchTickCount从未在VCL内部进行PACKAGEd,如下例所示.
extern PACKAGE int SearchTickCount;
Run Code Online (Sandbox Code Playgroud)
我想SearchTickCount在我的c ++代码中设置为零(按需).在我的代码中对它进行外部化使得c ++编译.但是,链接器(显然)找不到变量.
namespace Dbctrls
{
extern int SearchTickCount;
}
// later on, inside a function
Dbctrls::SearchTickCount = 0;
Run Code Online (Sandbox Code Playgroud)
有没有办法/解决方法来链接到这个变量? …
class Foo {
public:
explicit Foo(double item) : x(item) {}
operator double() {return x*2.0;}
private:
double x;
}
double TernaryTest(Foo& item) {
return some_condition ? item : 0;
}
Foo abc(3.05);
double test = TernaryTest(abc);
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,如果some_condition为真,为什么test等于6(而不是6.1)?
如下更改代码会返回6.1的值
double TernaryTest(Foo& item) {
return some_condition ? item : 0.0; // note the change from 0 to 0.0
}
Run Code Online (Sandbox Code Playgroud)
似乎(在原始示例中)来自Foo :: operator double的返回值被强制转换为int,然后返回到double.为什么?