小编sep*_*p2k的帖子

编译器错误:在此上下文中是私有的

我正在编写一个类,当我编译时,我收到一条错误消息,指出“在此上下文中是私有的”,而另一条则指出“非静态数据成员的使用无效”。但是如果我在我的 cpp 文件中的 addShipment 函数之前注释掉所有内容,它编译就好了。有人可以向我解释有时会导致错误而有时不会导致错误的不同之处,以及两种不同类型的错误是否相关。

产品.h:

#ifndef PRODUCT_H
#define PRODUCT_H

#include <iostream>

class Product {
    public:
        Product(int productID, std::string productName);
        std::string getDescription();
        void setDescription(std::string description);
        std::string getName();
        int getID();
        int getNumberSold();
        double getTotalPaid();
        int getInventoryCount();
        void addShipment(int shipmentQuantity, double shipmentCost);
        void reduceInventory(int purchaseQuantity);
        double getPrice();
    private:
        int productID;
        std::string name;
        std::string description;
        double totalPaid;
        int inventoryCount;
        int numSold;
};

#endif
Run Code Online (Sandbox Code Playgroud)

产品.cpp:

#include <iostream>
#include "Product.h"
using namespace std;

Product::Product(int productID, string productName) {
    Product::productID = productID;
    Product::name = productName;
} …
Run Code Online (Sandbox Code Playgroud)

c++ private class

11
推荐指数
2
解决办法
5万
查看次数

如何在Haskell中的函数中重新分配变量?

我不知道如何在函数中重新赋值变量.

例如,

elephant = 0

function x = elephant = x
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

haskell

11
推荐指数
4
解决办法
9341
查看次数

什么是URL中的方案和协议之间的区别?

我希望有人能向我澄清协议和网址中的方案之间的技术差异.(或确定其他可以放入计划中的项目?)

最初我以为它们是相同的,而且这个计划只是它的另一个名称.

您可以在此维基百科文章中找到此处引用的方案.

虽然根据这里的答案,一个方案不被认为是一个协议,因为:

没有传输层或编码

这是定义它们之间差异的正确方法,还是有更多的方法使两者不同?

当我处理协议或方案时,我怎么能清楚地说出来?(或者除了也有资格在方案中使用的协议之外的东西?因为似乎协议被放置在url的scheme部分中)

url protocols url-scheme

11
推荐指数
4
解决办法
3774
查看次数

如何找出编译器生成了哪些函数?

我知道编译器生成的函数、三规则和五规则。在现实世界的场景中,确定编译器实际创建了哪些编译器生成的函数(构造函数、赋值运算符、析构函数)可能并非易事。

有没有办法列出特定类的编译器生成的函数?

我主要对 Visual Studio 2019 和 Xcode 感兴趣,但更受欢迎的通用解决方案。

c++ c++11

11
推荐指数
2
解决办法
444
查看次数

抛出或不抛出异常?

我正在和我的一个朋友谈话,通过我的新代码,我没有处理异常,只是因为我不知道如何在C++中这样做.他的回答让我感到惊讶:"为什么你想要抛出异常?" 我问他为什么,但他没有一个令人满意的答案,所以我用Google搜索.我找到的第一个页面之一是博客文章,发布的人并非完全反对例外,但在回复中开始了宗教战争:http://weblogs.asp.net/alex_papadimoulis/archive/2005/03 /29/396141.aspx

现在我开始怀疑:抛出异常是不是很糟糕?对于像我这样的学生来说,使用异常学习编程是不正常的吗?(当我抛出异常时,我会在代码的另一个级别捕获它们,大多数时候都会对它们进行处理).我有一个代码示例,我想知道我该怎么做:

int x;
cout << "Type an integer: ";
cin >> x;
Run Code Online (Sandbox Code Playgroud)

那里输入的任何不是整数的东西都会触发异常,对吧?这个例外应该在那里处理.但是当我在一个正在程序中其他地方使用的类中有一个可能的异常时,我应该让这个方法抛出一个异常,这样我可以在任何我调用它的地方处理它,或者我应该在它有任何问题时返回一个标准值?

例外总是好的,总是坏的,或者在"特殊"情况下使用的东西?为什么?

c++

10
推荐指数
2
解决办法
6367
查看次数

由于编译器错误,此代码是否无法构建?

构建,而不仅仅是编译,如果启用了优化,则在使用Delphi 6时,以下内容将导致编译错误.使用赋值而不是inc()有效.这是编译器错误吗?奇怪的记录结构是因为原始代码已经简化为这个最小的例子.

program Project1;

type
  requestCountsType = array[0..1] of
    record
    processed: int64;
    end;

  talliestype = record
    counts: requestCountsType;
    end;

  healthtype = record
    charged: talliestype;
    end;

procedure computeProcessed(const h: healthtype; var requests, bytesin, bytesout: int64);
var i: byte;
begin
requests := 0; bytesin := 0; bytesout := 0;
for i := 0 to 1 do
  begin
  inc(requests, h.charged.counts[i].processed); // including this generates compiler internal error C1405 when optimization is on
  // requests := requests + h.charged.counts[i].processed; // this works
  end;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi

10
推荐指数
1
解决办法
259
查看次数

Java:曾经见过一个编译器或工具,它在数组初始化器中拒绝最后一个逗号?

我的神秘面纱就是这样开始的.考虑一下这段代码:

import java.util.Set;
import javax.annotation.processing.*;
import javax.lang.model.element.TypeElement;

@SupportedOptions({
  "thing1",
  "thing2",
})
public class fc extends AbstractProcessor
{
  @Override
  public boolean process( Set<? extends TypeElement> anns, RoundEnvironment re)
  {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你看过大多数脚手架(我只是想确保它完全没有完成并且你可以运行你的编译器),你会看到中间有一个注释,它需要一个String数组初始化器,并且有一个逗号之后"thing2".现在,如果你是那种让Java语言规范在晚上与你同住的人,你会记得最后一个逗号是完全有效的,"可能会出现在数组初始值设定项中的最后一个表达式之后被忽略." 因此,如果您在自己喜欢的地方尝试这个javac,那么它完全编译就不会感到惊讶.

所以这就是谜.上面的示例直接来自真实项目中请求的真实补丁,因为有人在构建该项目时获得了真正的"非法表达式"编译器消息,并在删除最终逗号时离开了.

很明显,那个人正在使用一个braindamaged版本javac,或者在他的工具链中有一些其他的whizbang source munging工具,它没有完全正确的Java语法,虽然他在他的错误报告中提供了其他完整的信息,在这种情况下只有真正重要的信息将是谁的编译器和工具链以及他正在使用的版本,并且他没有提供任何这些!因此,不仅是对不需要它的代码进行了虚假修补,而且没有足够的信息来提交它真正需要的错误报告,工具供应商会在有效的Java上产生虚假错误.

所以,我有点众包这个:) ...任何人都可以找到一个不能成功编译上述代码的Java编译器或其他相关工具,但会标记类似于此示例中报告的错误吗?那么也许我们会知道罪魁祸首是什么.

我只是部分地感到恼怒,因为我的代码被虚假修补了;)...它至少让我感到烦恼,因为可能还有一些尚未修复的工具,并且会让更多的人感到困惑关于什么是Java和什么不是,并导致更多奇怪的补丁代码没问题.

谢谢!

java arrays syntax initializer

10
推荐指数
1
解决办法
102
查看次数

C语言数组中未初始化元素的值

我有一个包含3个元素的数组.但我只想初始化其中的两个.我让第三个元素空白.

unsigned char array[3] = {1,2,};
int main(){
  printf("%d",array[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印结果是0.我在IAR上测试了它,还有一些在线编译器.

第三个元素的值是否有任何C规则?是否有任何编译器通过0xFF填充第三个元素?(特别是交叉编译器)

c arrays initialization

10
推荐指数
1
解决办法
6824
查看次数

C++ 工具链和编译器有什么区别?

我知道有很多编译器,例如gcc, clangninja但我不断听说“ Toolchains”等,但我不明白它们是什么,例如“gnu-toolchain”等

c++ gcc clang toolchain

10
推荐指数
2
解决办法
6124
查看次数

Haskell - 函数式编程帮助

试图感受haskell.我是一名经验丰富的程序员,拥有PHP,JAVA,VB和许多其他语言,但我发现haskell稍微难以理解.任何人都可以给我一个英语翻译为以下haskell功能,让我开始...

quicksort []     = []
quicksort (x:xs) = quicksort [y | y <- xs, y<x ]
                   ++ [x]
                   ++ quicksort [y | y <- xs, y>=x]
Run Code Online (Sandbox Code Playgroud)

英语翻译的一个例子在下面的评论中:

// --- FOR_LOOP ->
// --- $abc goes from 1 to 10 ->
// --- If $abc is even - print $abc is even ->
// --- else if $abc is odd - print $abc is odd ->
// --- END_FOR_LOOP

for( $abc = 1 ; $abc <= 10 ; …
Run Code Online (Sandbox Code Playgroud)

haskell

9
推荐指数
1
解决办法
514
查看次数