我正在尝试ShadeRec使用其构造函数初始化我的类的实例:
ShadeRec(World& world);
Run Code Online (Sandbox Code Playgroud)
所以我转到它:
ShadeRec sr(*this);
Run Code Online (Sandbox Code Playgroud)
其中"this"是World类的一个实例.
我收到以下错误:
World.cpp: In member function ‘ShadeRec World::hitObjects(const Ray&) const’:
World.cpp:52: error: no matching function for call to ‘ShadeRec::ShadeRec(const World&)’
ShadeRec.h:17: note: candidates are: ShadeRec::ShadeRec(const ShadeRec&)
ShadeRec.h:15: note: ShadeRec::ShadeRec(World&)
Run Code Online (Sandbox Code Playgroud)
假设问题只是World实例具有属性const,我该如何摆脱此错误消息?
我有一个由包含列表(种类)的表组成的sql文件,然后是一个引用该表的主表(动物),如:
DROP TABLE IF EXISTS `tbl_species`;
CREATE TABLE `tbl_species` (
specie VARCHAR(10) PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tbl_species` VALUES ('dog');
INSERT INTO `tbl_species` VALUES ('cat');
INSERT INTO `tbl_species` VALUES ('bird');
DROP TABLE IF EXISTS `tbl_animal`;
CREATE TABLE `tbl_animal` (
id_animal INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25) NOT NULL DEFAULT "no nombre",
specie VARCHAR(10) NOT NULL DEFAULT "dog",
FOREIGN KEY (specie) REFERENCES `tbl_species` (specie),
CONSTRAINT `uc_Info_Animal` UNIQUE (`id_animal`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Run Code Online (Sandbox Code Playgroud)
这在sqlfiddle上工作没有问题,但是当我在服务器上执行sql文件时,我收到以下错误: …
我从C++开始,我对指针有一些疑问,而且它是副本.
我打算写一个例子:
class Abc{
Qwe q;
}
Abc* a = new Abc();
Abc* b = new Abc();
b->q = a->q; //??
Run Code Online (Sandbox Code Playgroud)
这项任务会发生什么?是'a'将'q'的副本给'b'?
问题是我想对两个指针都有不同的'q',我不知道如何复制它.就像在例子中?
谢谢
假设我有两个javascript数组,如下所示:
arrA = [1,2,3]
arrB = [4,5,6]
Run Code Online (Sandbox Code Playgroud)
有没有办法可以用不同的变量名称引用它们然后再路上?如果我这样做:
arrC = arrA
arrD = arrB
Run Code Online (Sandbox Code Playgroud)
它创建初始数组的副本,而不是指向它们的指针/引用.所以,如果我搞砸了价值arrC,arrA就不会更新.有办法解决这个问题吗?
谢谢.
我在多个来源中读到,C++引用只不过是一个带有编译时间限制的指针.
如果这是真的,为什么我被迫取消引用一个指针,以便将它传递给一个需要参数的函数?
void FooRef(const int&);
void FooPointer(const int*);
int main()
{
int* p = new int(5);
FooPointer(p);
FooRef(*p); // why do I have to dereference the pointer?
...
}
Run Code Online (Sandbox Code Playgroud)
据我了解,如果我要传递int给FooRef编译器将为我创建变量地址的指针(引用),但如果该类型已经是指针,那么解除引用它似乎毫无意义.在我看来,我正在取消引用一个指针,只是为了让编译器从取消引用的值创建另一个指针,这对我来说似乎毫无意义.
仅复制指针而不仅仅是引用+引用该值是不是更简单/更高效?(也许这真的发生了什么?)
我在这里错过了什么吗?调用FooRef这种情况比调用慢FooPointer吗?
在编译期间,引用和指针是否真的产生相同的代码?
是否有可能在没有引用其类的情况下调用方法?
例如,你有一个帮助类:
class HelperTools
{
public static void DoWork()
{ /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)
然后你需要调用它:
class MainClass
{
public static void Main()
{
HelperTools.DoWork();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在DoWork();没有参考的情况下打电话?像这样:
public static void Main()
{
DoWork();
}
Run Code Online (Sandbox Code Playgroud)
只是为了简单起见.
有时,我得到了辅助方法,如:
private string generateReport(string doc, List<string> sheets, Blah blahblah)
{
//doStuff()
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中看到很多这个让我想知道我是不是在搞乱计算机内存 - 来回抛出参数.在基本层面上,这个问题通过使用类级别变量来解决,但在某些情况下,我可能是从一个类派生或使用另一个类的辅助方法.所以我的问题是:
使用引用是一个更好的选择吗?即
private string generateReport(ref string doc, ref List<string> sheets, ref Blah blahblah)
{
//doStuff()
}
Run Code Online (Sandbox Code Playgroud)
什么时候应该我不使用它(如果适用)?
谢谢.
我正在尝试在不使用MS Designer的情况下为表单编写代码.
当我编译时,我总是得到同样的错误:
System.ComponentModel.*类型在未引用的程序集中定义.
这将出现在IComponent,ISynchronizeInvoke和Component中.我想我已经引用了它.
我已经尝试删除引用并重新应用它,并切换到早期版本的.net.它必须是我环境中的东西,但我找不到它.
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class EmptyForm : System.Windows.Forms.Form
{
public EmptyForm()
{
}
public static int Main()
{
Application.Run(new EmptyForm());
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)

我按照这本书,无法编译这个例子.有什么建议?
1 #define __STDC_WANT_LIB_EXT1__ 1
2 #include <string.h>
3 #include <stdio.h>
4
5
6 int main(void)
7 {
8 char source[] = "Here we go...";
9 char destination[50];
10
11 if(strcpy_s(destination, sizeof(destination), source))
12 printf("An error occurred copying the string.n");
13
14
15 return 0;
16 }
Run Code Online (Sandbox Code Playgroud)
错误:
/tmp/ccc5KZDZ.o: In function `main':
test.c:(.text+0x48): undefined reference to `strcpy_s'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud) 在c ++中,这适用于指针
#include <iostream>
using namespace std;
struct Base {
virtual void base_method() {
cout << "this is the base\n";
}
};
struct Derived : public Base {
void base_method() {
cout << "this is the child\n";
}
};
void test(Base & b) {
b.base_method();
}
void test2(Base * b) {
b->base_method();
}
int main() {
Derived * d;
Derived & d1();
test2(d); //this works
test(d1); //this doesn't
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么你不能用像Child & c()传入测试函数的引用做同样的事情.我问这个,因为指针和引用往往表现相似