我偶尔会看到一些问题,例如"声明和定义之间有什么区别":
定义和声明之间有什么区别? 区别很重要,在理智上它实现了两个重要的事情:
那么为什么C typedef声明不被称为typedef定义?
首先,它显然是一个定义.它定义了一个别名.新名称将被视为指现有的东西.但它确实将对特定参照物的引用联系在一起,毫无疑问是一个定义的陈述.
其次,typedec如果是宣言,它不会被称为a 吗?
第三,它不会避免人们在尝试使用typedef进行前瞻性声明时所提出的所有令人困惑的问题吗?
为什么这样做:
struct person {
char name[50];
short mental_age;
} p1 = {"Donald", 4};
Run Code Online (Sandbox Code Playgroud)
但不是这个:
typedef struct {
char name[50];
short mental_age;
} PERSON p1 = {"Donald", 4};
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在定义这个结构时创建一个typedef结构并初始化Donald?
我正在使用
char *thisvar = "stringcontenthere";
Run Code Online (Sandbox Code Playgroud)
在C中声明一个字符串
这是在C中声明字符串的最佳方法吗?
如何从C++ - 字符串生成C-String?
我正在浏览Google C++风格指南,并发现了这个:
"不要在命名空间std中声明任何内容,甚至不要在标准库类的前向声明中声明.在命名空间std中声明实体是未定义的行为,即不可移植.要从标准库声明实体,请包含相应的头文件."
有人可以解释这意味着什么以及为什么这是使用示例代码的未定义行为?
//foo.h
class Foo
{
private:
static int number;
public:
static int bar();
};
//foo.cc
#include "foo.h"
int Foo::bar()
{
return Foo::number;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我想在类定义之外定义静态函数并访问静态值.
undefined reference to `Foo::number'
Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关前瞻性声明的一些内容,包括在这个论坛中.他们都说它使我们免于包含头文件,但以下代码会生成错误:
#ifndef CLASSA_H_
#define CLASSA_H_
class B;
class A {
public:
A();
~A();
int getCount();
private:
static int _count;
int _num;
B _b1; //ERROR
};
Run Code Online (Sandbox Code Playgroud)
编译说:
A.h:23: error: field ‘_b1’ has incomplete type
我注意到如果我制作_b1类型B*问题就解决了.
那么前向声明只适用于指针类型吗?
如果我想A持有B对象我必须#inlcude "B.h"?
谢谢!
可能重复:
定义和声明之间有什么区别?
我试图彻底理解C中的"定义"和"声明".
我相信x这里是定义的,因为外部变量自动初始化为0,并且定义了声明和初始化的内容.那是准确的吗?
int x;
main() {}
Run Code Online (Sandbox Code Playgroud)
根据x这个案例中的一个是定义,但为什么呢?它没有被初始化......
int print_hello()
{
int x;
}
Run Code Online (Sandbox Code Playgroud) 我有以下c ++代码:
#include <iostream>
#include <string>
int main( int argc, char* argv[] )
{
const std::string s1 = "ddd";
std::string s2( std::string( s1 ) );
std::cout << s2 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
结果是:1为什么?当我使用-Wall标志时,编译器写警告:'std :: string s2(std :: string)'的地址总是计算为'true'
但是这段代码:
#include <iostream>
#include <string>
int main( int argc, char* argv[] )
{
const std::string s1 = "ddd";
std::string s2( ( std::string )( s1 ) );
std::cout << s2 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
结果:ddd
这是正常的结果
我正在尝试这个 C库.我已将文件添加到我的项目中,并创建了一个Objective-C文件以跟随github页面上的示例.我已经在我的桥接头中导入了Objc文件,但是当我编译时我
Ld /Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Products/Debug-iphoneos/trinkeSwift.app/trinkeSwift normal arm64
cd /Users/nickporter/Developer/trinkeSwift
export IPHONEOS_DEPLOYMENT_TARGET=8.0
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk -L/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Products/Debug-iphoneos -F/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Products/Debug-iphoneos -filelist /Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/trinkeSwift.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -dead_strip -fobjc-arc -fobjc-link-runtime -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Xlinker -add_ast_path -Xlinker /Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/trinkeSwift.swiftmodule -miphoneos-version-min=8.0 -framework CoreGraphics -framework Foundation -framework UIKit -Xlinker -dependency_info -Xlinker /Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/trinkeSwift_dependency_info.dat -o /Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Products/Debug-iphoneos/trinkeSwift.app/trinkeSwift
duplicate symbol _str_time in:
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/TimeParser.o
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/DateGenerator.o
duplicate symbol _mymodifier in:
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/TimeParser.o
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/DateGenerator.o
duplicate symbol _fromModifier in:
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/TimeParser.o
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/DateGenerator.o
duplicate symbol _timePointer in:
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/TimeParser.o
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/DateGenerator.o
duplicate symbol _temp_time in:
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/TimeParser.o
/Users/nickporter/Library/Developer/Xcode/DerivedData/trinkeSwift-dhbvybojkdowcfffscchwxwgahyj/Build/Intermediates/trinkeSwift.build/Debug-iphoneos/trinkeSwift.build/Objects-normal/arm64/DateGenerator.o
duplicate symbol _set_time …Run Code Online (Sandbox Code Playgroud) c++ ×6
c ×5
declaration ×2
definition ×2
string ×2
class ×1
coding-style ×1
g++ ×1
ios ×1
standards ×1
static ×1
struct ×1
swift ×1
terminology ×1
typedef ×1
variables ×1